在rust ndarray中更新矩阵的一行

y0u0uwnf  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(81)

我想在rust ndarray中更新一行2D矩阵,但是row_mut似乎不允许我直接更新该行。
例如(playground link

let mut array = array![[1., 2.], [3., 4.]];
let y = array![5., 5.];
array.row_mut(0) += &y;

字符串
但是,如果我将可变切片分配给一个临时变量,然后执行+=操作,它就可以工作。下面的代码按预期工作(playground link)。

let mut array = array![[1., 2.], [3., 4.]];
let y = array![5., 5.];
let mut z = array.row_mut(0);
z += &y;


知道是什么导致了这种行为吗?

uurity8g

uurity8g1#

复合赋值表达式的左手必须是位置表达式。
位置表达式是表示内存位置的表达式。这些表达式是引用局部变量、静态变量、解引用(*expr)、数组索引表达式(expr[expr])、字段引用(expr.f)和带括号的位置表达式的路径。所有其他表达式都是值表达式。
array.row_mut(0)不是位置表达式,所以+=不起作用。您可以直接调用add_assign

array.row_mut(0).add_assign(&y);

字符串

相关问题