Crates.io | linalg-traits |
lib.rs | linalg-traits |
version | 0.7.2 |
source | src |
created_at | 2024-11-11 00:23:41.809194 |
updated_at | 2024-12-01 04:30:40.559502 |
description | Traits for generic linear algebra. |
homepage | |
repository | https://github.com/tamaskis/linalg_traits |
max_upload_size | |
id | 1443319 |
size | 127,951 |
Traits for generic linear algebra.
Please see https://docs.rs/linalg-traits.
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]);