如何从视图中有效地克隆 Rust ndarray?

How to efficiently clone a Rust ndarray from a view?

我已经创建了 2D ndarray 的 1D 行视图,我想克隆其中的内容。目前,我是这样做的:

let mut row_orig = table.subview_mut(Axis(0), chosen_row);
// ...
// some operations on row_orig
// ...
let mut row_copy = Array1<f32>::zeros(table.cols());
row_copy.assign(&row_orig);  

用零创建和初始化似乎有点低效,然后 执行复制。另外,我必须在不需要时将 row_copy 声明为可变的。有没有更好的办法?显然,.clone 对于 ndarray 视图不存在。

我认为使用切片可能是解决方案,但我 运行 遇到了此代码的 mutable/immutable 问题:

let row_copy = table.slice(s![chosen_row,..]).clone();
// do something mutable with table

I'd like to clone the contents.

如果是这种情况,那么您不希望只克隆数组视图(这本来只是一个浅拷贝)。您想要一个与另一个数组具有相同内容的唯一数组。这可以用 to_owned.

来完成
let row_orig = table.subview(Axis(0), chosen_row);
let row_copy = row_orig.to_owned();