You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:47:05