这个ndarray箱子支持多种创建数组的方法 —— 该食谱主要专注std::Vec
的ndarray::Array
的创建,通过from_vec
完成。把两个数组加在一起和把两个数字加在一起,没有什么不同。在数组上,使用&
符号,能在一次算术运算中,阻止消耗数组的操作。没有&
的话,数组会被消耗。
在第一个示例中,数组a
和b
在 let 语句(z = a + b
)中移动:。 在第二个示例中,数组c
和d
不会移动,而是为w
创建一个新的数组。在 vector 总和(w = &c + &d
)之后,更新c
或d
,对w
值是没有影响的。另外,在打印c
时按预期工作,打印b
时出错,因为移动了。见两个数组的二元运算符更多细节。
extern crate ndarray;
use ndarray::Array;
fn main() {
let a = Array::from_vec(vec![1., 2., 3., 4., 5.]);
let b = Array::from_vec(vec![5., 4., 3., 2., 1.]);
let mut c = Array::from_vec(vec![1., 2., 3., 4., 5.]);
let mut d = Array::from_vec(vec![5., 4., 3., 2., 1.]);
let z = a + b;
let w = &c + &d;
let epsilon = 1e-8;
for elem in z.iter() {
let diff: f32 = *elem - 6.;
assert!(diff.abs() < epsilon);
}
println!("c = {}", c);
c[0] = 10.;
d[1] = 10.;
for elem in w.iter() {
let diff: f32 = *elem - 6.;
assert!(diff.abs() < epsilon);
}
}