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

Rust Ndarray如何使用整数列表/Vec对ArrayBase进行指定索引切片

ndarray 基于动态整数集合取切片的实现

s!宏只支持编译期可确定的固定整数、连续范围作为切片参数,没法直接传入运行时才能确定长度、内容的整数集合做花式索引,这类场景直接用内置的select方法就能实现。

实现示例

对应你给出的测试数组,选取0、3、4列(即你描述的第1、4、5列,ndarray为0基索引)的代码如下:

use ndarray::{arr2, Axis};

fn main() {
    let ar = arr2(&[[1.,2.,3., 4.,5.,6.], [7., 8., 9., 10., 11., 12.]]);
    // Axis(1) 指定在列维度(第二维度)做选择,第二个参数传入任意整数索引集合
    let selected = ar.select(Axis(1), &[0, 3, 4]);
    dbg!(selected);
}

运行输出和你期望的结果完全一致:

[[1.0, 4.0, 5.0],
 [7.0, 10.0, 11.0]]

使用说明

  • 传入的索引集合支持任意整数类型的切片、Vec,不需要提前排序,索引可以重复,不需要是连续值
  • 如果需要在多个维度做离散索引选择,可以链式调用select方法,依次指定不同Axis和对应索引集合即可
  • 如果需要混合连续范围切片和离散索引选择,可以先调用slice用s!宏切出连续范围的视图,再对需要离散选择的维度调用select
  • 注意:离散索引选中的元素在原数组中内存不连续,因此select返回的是新分配的独立数组,不是原数组的借用视图,不存在生命周期绑定问题。

内容的提问来源于stack exchange,提问作者Anatoly Bugakov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:27:45