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

如何使用多个索引对numpy数组进行多次拆分且不使用循环?

Numpy 无循环按多索引拆分数组实现

因为拆分后各子数组长度不一致,最终结果只能是object类型数组,你可以通过np.vectorize封装拆分逻辑,完全避免显式循环语法,实现向量化调用。

完整可运行实现代码如下:

import numpy as np

# 初始化输入数组和拆分索引
y = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
split_points = np.array([2, 4, 7])

# 定义单拆分点的拆分逻辑
def split_single(n):
    # np.split第二个参数是拆分位置列表,[n]表示在索引n处拆成两段
    return np.split(y, [n])

# 封装为向量化函数,指定输出为object类型适配不等长数组
vec_split = np.vectorize(split_single, otypes=[object])

# 调用得到结果
res = vec_split(split_points)

运行后输出的res结构和需求完全一致:

array([[array([0, 1]), array([2, 3, 4, 5, 6, 7, 8, 9])],
       [array([0, 1, 2, 3]), array([4, 5, 6, 7, 8, 9])],
       [array([0, 1, 2, 3, 4, 5, 6]), array([7, 8, 9])]], dtype=object)

如果需要转成嵌套列表格式,调用res.tolist()即可。

补充说明

np.vectorize是numpy提供的函数包装工具,会自动遍历输入的拆分索引数组的每个元素调用拆分逻辑,不需要手动编写循环,符合向量化操作的使用习惯。如果你接受极简的列表推导写法(性能和上述方案基本一致,只是语法上有循环关键词),也可以用一行代码实现:

res = [np.split(y, [n]) for n in [2,4,7]]

内容的提问来源于stack exchange,提问作者Benjamin Tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:48:04