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

如何通过范围索引数组从numpy数组中提取指定区间元素生成新数组

Numpy按指定索引区间提取元素实现方案

首先导入依赖库:

import numpy as np

你可以根据自己的需求选择以下两种实现方式:

方式1:不同长度区间对齐,短区间补空值

匹配你示例中要求的输出格式,空值用np.nan(可自行替换为-1、0等自定义填充值):

# 示例输入构造
A = np.array([1,161,51,105,143,2,118,127,37,19,4,29,13,136,129,128,129,
              250,52,53,57,53,49,53,57,49,55,177,84,69,85,210,6,43,128,
              194,253,0,236,129,131,53,54,56,54,50,48,182,128,52,113,13,169,
              57,41,233,128,254,160,128,9,81,75,166,89,178,128,128,128,128,128,
              128,177,128,84,81,84,197,206])
I = np.array([[0,2],[2,5],[5,8],[8,14]])

# 计算所有区间的最大长度
interval_lens = I[:, 1] - I[:, 0]
max_interval_len = interval_lens.max()

# 初始化结果数组,默认填充np.nan对应你要求的nul
result = np.full((len(I), max_interval_len), np.nan)

# 逐区间赋值
for idx, (start, end) in enumerate(I):
    current_len = end - start
    result[idx, :current_len] = A[start:end]

运行后输出的result格式和你要求的完全匹配,示例I的输出为:

array([[  1., 161.,  nan,  nan,  nan,  nan],
       [ 51., 105., 143.,  nan,  nan,  nan],
       [  2., 118., 127.,  nan,  nan,  nan],
       [ 37.,  19.,   4.,  29.,  13., 136.]])

如果需要整数类型的填充值,将初始化代码修改为如下即可:

# 示例用-1作为填充值
result = np.full((len(I), max_interval_len), -1, dtype=int)

方式2:不需要对齐,直接生成不同长度的子列表

如果不需要统一长度,直接用列表推导式一行即可实现:

result_list = [A[start:end].tolist() for start, end in I]

输出为:

[[1, 161], [51, 105, 143], [2, 118, 127], [37, 19, 4, 29, 13, 136]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:03