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

Python 使用每两个数字之间的numpy索引范围从列表中提取值,python,numpy,Python,Numpy,我想从“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”列表中指定的索引80到90为止。我不知道如何在“范围”列表中的每两个数字之间循环 如果我只需要提取2

我想从“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”列表中指定的索引80到90为止。我不知道如何在“范围”列表中的每两个数字之间循环

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

idx1 = nums[10:21]
idx2 = nums[20:31]
idx3 = nums[30:41]
但是,对于各种范围的组合,尤其是在我的原始数据集中,要提取将近100个范围的索引,这样做会变得单调乏味

感谢您在这方面提供的帮助。

您可以在选择的步骤中使用for循环:

idxs = []

for n in range(10, 1000, 10):
    idx.append(nums[n:n+11])
您可以将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
当然,你是不是用提取来代替打印

>>> ranges = [10, 20, 35, 42]
>>> for start, end in zip(ranges[:-1], ranges[1:]):
...     print(start, end)
...
10 20
20 35
35 42
当然,用提取代替打印这应该可以做到:

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

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

听起来你只需要一个循环,就像是重塑你的目标:NUM[10:]重塑-1,10.听起来你只需要一个循环,就像是在重塑你的目标:NUM[10:]重塑-1,10。