使用每两个数字之间的numpy索引范围从列表中提取值

2024-09-25 08:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从'nums'数组中提取'ranges'列表中包含的索引范围

例如:

ranges=np.arange(10, 100, 10).tolist() 
#[10, 20, 30, 40, 50, 60, 70, 80, 90]

nums=np.arange(10, 1000, 5.5)

这里,我想从'nums'数组中提取索引10到20,然后提取20到30,依此类推,直到在'ranges'列表中指定的索引8090。我不知道如何通过'ranges'列表在每两个数字之间循环

如果我只需要提取2-3个索引范围,我只需要硬编码索引并切片-

idx1 = nums[10:21]
idx2 = nums[20:31]
idx3 = nums[30:41]

但是,对于各种范围的组合,尤其是在我的原始数据集中,要提取将近100个范围的索引,这样做会变得单调乏味

谢谢你在这方面的帮助


Tags: 编码列表原始数据np切片数字数组ranges
3条回答

这应该做到:

dic={}
for i in np.transpose([ranges[:-1],ranges[1:]]):
     dic[str(i[0])+"-"+str(i[1])]=nums[i[0]:i[1]]
print(dic)

您可以将for循环用于所选步骤:

idxs = []

for n in range(10, 1000, 10):
    idx.append(nums[n:n+11])

像这样的

>>> ranges = [10, 20, 35, 42]
>>> for start, end in zip(ranges[:-1], ranges[1:]):
...     print(start, end)
...
10 20
20 35
35 42

(当然,请使用提取代替打印)

相关问题 更多 >