我想在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;
型
知道是什么导致了这种行为吗?
1条答案
按热度按时间uurity8g1#
复合赋值表达式的左手必须是位置表达式。
位置表达式是表示内存位置的表达式。这些表达式是引用局部变量、静态变量、解引用(*expr)、数组索引表达式(expr[expr])、字段引用(expr.f)和带括号的位置表达式的路径。所有其他表达式都是值表达式。
array.row_mut(0)
不是位置表达式,所以+=
不起作用。您可以直接调用add_assign
。字符串