如何将ndarray::ArrayView转换为新ndarray?高效从视图创建新数组
Rust ndarray:ArrayView转数组与切片视图操作
1. 将ArrayView转换为新的ndarray数组
要把ndarray::ArrayView转换成独立的ndarray::Array,最直接的方式是调用to_owned()方法——它会复制视图指向的数据,生成一个拥有所有权的新数组:
use ndarray::{Array, ArrayView}; let original_array = Array::from_shape_vec((3, 3), vec![1,2,3,4,5,6,7,8,9]).unwrap(); let view: ArrayView<i32, _> = original_array.view(); // 转换为新数组 let new_array = view.to_owned();
另外,也可以使用to_array()方法,效果和to_owned()完全一致,命名更直观:
let new_array = view.to_array();
2. 切片获取视图并创建新数组
ndarray提供了s!宏实现多维切片,语法和你示例的array[1..5, 3..6]匹配,操作分两步:
步骤1:获取切片视图
用s!宏对原数组切片,得到ArrayView(这一步是零成本的,不会复制数据):
use ndarray::{Array, s}; let original_array = Array::from_shape_vec((6, 8), (0..48).collect()).unwrap(); // 获取1..5行、3..6列的视图 let slice_view = original_array.slice(s![1..5, 3..6]);
步骤2:从视图生成新数组
调用to_owned()或to_array()复制视图数据,生成独立的新数组:
let new_array = slice_view.to_owned();
你也可以把两步合并成一行,直接从切片结果生成数组:
let new_array = original_array.slice(s![1..5, 3..6]).to_owned();
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

