0

让我尝试:

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>, _>`
4

1 回答 1

2

如果你使用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
}

此片段的 Rust 操场链接

这是因为 ndarray 没有实现类型的Add特征usize。它是为i32,u32和任何其他固定大小的整数类型实现的。

更新:我已经提交了一个 PR 来解决这个问题,它已经被合并了。

参考
于 2021-12-05T08:51:21.653 回答