Rust Can';不要在ndarray::ViewRepr上做数学运算

Rust Can';不要在ndarray::ViewRepr上做数学运算,rust,Rust,铁锈游乐场名单 我在用ndarray,我在用数组的部分做数学运算。下面是一个生成我看到的错误的示例: use ndarray::{Array1, Array2}; fn main() { let mut bob = Array2::<i16>::eye(3); let ralph = Array1::<i16>::ones([3]); for mut b in bob.outer_iter() { b += b + ralph;

铁锈游乐场名单

我在用ndarray,我在用数组的部分做数学运算。下面是一个生成我看到的错误的示例:


use ndarray::{Array1, Array2};

fn main() {
    let mut bob = Array2::<i16>::eye(3);
    let ralph = Array1::<i16>::ones([3]);
    for mut b in bob.outer_iter() {
        b += b + ralph;
    }
    println!("{}", bob);
}

使用ndarray::{Array1,Array2};
fn main(){
让mut-bob=Array2:::眼睛(3);
让拉尔夫=Array1:::一个([3]);
对于bob.outer_iter()中的mut b{
b+=b+拉尔夫;
}
println!(“{}”,bob);
}
这会产生错误[E0369]:无法将'ArrayBase'添加到'ArrayBase'

我所希望的是一个版本的
bob
,每行添加
ralph

除了逐个元素生成一个新的数组元素外,还有其他方法可以做到这一点吗?

bob.outer\u iter()
逐个遍历这些值,为它们提供一个不可变的引用。为了能够变异,我们必须使用
bob.outer\u iter\u mut()

话虽如此,我认为这不是你想要的。有一种更简单的方法可以将
ndarray
添加到一起:

使用ndarray::{Array1,Array2};
fn main(){
让mut-bob=Array2:::眼睛(3);
让拉尔夫=Array1:::一个([3]);
让苏=鲍勃+拉尔夫;
println!(“{}”,sue);
}
bob.outer\u iter()
逐个遍历这些值,为它们提供一个不可变的引用。为了能够变异,我们必须使用
bob.outer\u iter\u mut()

话虽如此,我认为这不是你想要的。有一种更简单的方法可以将
ndarray
添加到一起:

使用ndarray::{Array1,Array2};
fn main(){
让mut-bob=Array2:::眼睛(3);
让拉尔夫=Array1:::一个([3]);
让苏=鲍勃+拉尔夫;
println!(“{}”,sue);
}

如果我理解正确,这个错误实际上非常有用。问题是,至少我认为您正在尝试向不可变的
ViewRepr
添加一些内容。那么如何使其适当地可变呢?您可以在bob.outer_iter_mut(){中为b使用
,但正如我在操场上尝试的那样,这还不能修复错误。通常当您具有类似
.iter()的函数时
它还有一个可变迭代器函数
。iter_mut()
.doing
让bob=bob+ralph;
而不是for循环做你想做的事吗?哦!该死的东西比我想象的要聪明!这就是答案——请看一个工作示例。把它放在答案选择中,我会将它标记为已回答。如果我理解正确,这个错误实际上非常有用。问题是,你是至少我想,尝试向一个不可变的
ViewRepr
添加一些东西。那么我如何使它适当地可变呢?你可以在bob.outer_iter_mut(){
中为b使用
,但正如我在操场上尝试的那样,这还不能修复错误。通常当你有一个类似
.iter()的函数时
它还有一个可变迭代器函数
。iter_mut()
.doing
让bob=bob+ralph;
而不是for循环做你想做的事吗?哦!该死的东西比我想象的要聪明!这就是答案——请看一个工作示例。把它放在答案选择中,我会把它标记为已回答。在你上面的一个评论之后,我尝试了
bob.outer\iter\mut()
,仍然遭遇失败——但是类似于上面的代码对我来说是成功的,即使有一个更复杂的例子。在你上面的一条评论之后,我尝试了
bob.outer\u iter\u mut()
,仍然遭遇失败——但是类似于上面的代码对我来说是成功的,即使有一个更复杂的例子。