【发布时间】:2019-08-29 20:08:27
【问题描述】:
这是我尝试过的
use ndarray::{arr2, s};
let mut a = arr2(&[[1, 2, 3],
[4, 5, 6]]);
let b = arr2(&[[2, 3, 3],
[5, 6, 6]]);
a.slice_mut(s![.., ..2]).assign(&a.slice_mut(s![.., 1..]));
由于借用规则显然失败了(playround link):
error[E0499]: cannot borrow `a` as mutable more than once at a time
--> src/main.rs:13:38
|
13 | a.slice_mut(s![.., ..2]).assign(&a.slice_mut(s![.., 1..]));
| - ------ ^ second mutable borrow occurs here
| | |
| | first borrow later used by call
| first mutable borrow occurs here
a 是我所拥有的,b 是我想要获得的。
在 numpy 中就像 a[:, :2] = a[:, 1:] 一样简单。
PS 也许nalgebra crate 有一个简单的解决方案?
【问题讨论】:
-
你为什么不写一个for循环呢?
-
@FrenchBoiethios 只是一个 for 循环不会解决所有可能出现的混叠问题(例如从左到右与从右到左复制)。我也希望图书馆为我做这件事,或者至少帮我做这件事。否则我会求助于纯 C。
标签: multidimensional-array rust copy borrowing nalgebra