【问题标题】:How to efficiently clone a Rust ndarray from a view?如何从视图中有效地克隆 Rust ndarray?
【发布时间】:2019-02-25 23:23:13
【问题描述】:

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

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

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

【问题讨论】:

  • “但我遇到了一个可变/不可变的问题”请针对该特定问题提供minimal reproducible example,以便我们可以就该特定尝试提供更好的见解.添加一些生成tablechosen_row 的最小代码也会有所帮助。

标签: multidimensional-array view rust clone slice


【解决方案1】:

我想克隆内容。

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

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

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多