Как эффективно клонировать Rust ndarray из вида? - PullRequest
0 голосов
/ 21 сентября 2018

Я создал одномерный вид 2D-массива и хотел бы клонировать его содержимое.В настоящее время я делаю это так:

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.

Я думал, что использование слайса может быть решением, но я сталкиваюсь с непостоянной / неизменной проблемой с этим кодом:

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

1 Ответ

0 голосов
/ 21 сентября 2018

Я хотел бы клонировать содержимое.

Если это так, то вы не хотите просто клонировать представление массива (которое было бы просто поверхностной копией).).Вы хотите массив с уникальным владением с тем же содержимым, что и другой массив.Это можно сделать с помощью to_owned.

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