让我尝试:
let mut a: Array2<usize> = Array2::zeros((20, 20));
let z = a.slice(s![.., 1]);
z += 1;
这使:
error[E0368]: binary assignment operation `+=` cannot be applied to type `ArrayBase<ViewRepr<&usize>, _>`
让我尝试:
let mut a: Array2<usize> = Array2::zeros((20, 20));
let z = a.slice(s![.., 1]);
z += 1;
这使:
error[E0368]: binary assignment operation `+=` cannot be applied to type `ArrayBase<ViewRepr<&usize>, _>`
如果你使用u64
而不是usize
,你会成功。请参见以下示例:
use ndarray::{s, Array2};
pub fn foo() -> Array2<u64> {
let mut a: Array2<u64> = Array2::zeros((20, 20));
let z = a.slice(s![.., 1]);
z += 1;
z
}
pub fn bar() -> Array2<usize> {
let mut a: Array2<usize> = Array2::zeros((20, 20));
let z = a.slice(s![.., 1]);
z += 1; // NOTE: Fails!
z
}
这是因为 ndarray 没有实现类型的Add
特征usize
。它是为i32
,u32
和任何其他固定大小的整数类型实现的。
更新:我已经提交了一个 PR 来解决这个问题,它已经被合并了。