11 releases (4 breaking)
new 0.5.0 | Nov 18, 2024 |
---|---|
0.4.2 | Nov 18, 2024 |
0.3.0 | Nov 17, 2024 |
0.2.1 | Nov 16, 2024 |
0.1.3 | Nov 11, 2024 |
#246 in Math
806 downloads per month
62KB
843 lines
linalg-traits
Traits for generic linear algebra.
Documentation
Please see https://docs.rs/linalg-traits.
Examples
Let's define a function that takes in a vector and returns a new vector with all the elements repeated twice. Using the Scalar
and Vector
traits, we can write it in a way that makes it independent of what types we use to represent scalars and vectors.
use linalg_traits::{Scalar, Vector};
use ndarray::{array, Array1};
use numtest::*;
// Define the function for repeating the elements.
fn repeat_elements<S: Scalar, V: Vector<S>>(v: &V) -> V {
// Create a new vector of the same type but with twice the length.
let mut v_repeated = V::new_with_length(v.len() * 2);
// Populate the vector.
for i in 0..v.len() {
v_repeated[2 * i] = v[i];
v_repeated[2 * i + 1] = v[i];
}
v_repeated
}
// Define the vector to be repeated.
let v: Array1<f64> = array![1.0, 2.0, 3.0];
// Repeat the elements.
let v_repeated: Array1<f64> = repeat_elements(&v);
// Check that the elements were properly repeated.
assert_arrays_equal!(v_repeated, [1.0, 1.0, 2.0, 2.0, 3.0, 3.0]);
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~0.1–1.2MB
~22K SLoC