首页 > 解决方案 > 如何从视图中有效地克隆 Rust ndarray?

问题描述

我创建了 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在不需要时声明为可变的。有没有更好的办法?显然,.clonendarray 视图不存在。

我认为使用切片可能是解决方案,但我遇到了这段代码的可变/不可变问题:

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

标签: multidimensional-arrayviewrustcloneslice

解决方案


我想克隆内容。

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

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

推荐阅读