如何从视图中有效地克隆 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();
我已经创建了 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();