我有两个相同大小的 numpy.array 对象(都是一维的),其中一个包含起始索引位置列表,另一个包含结束索引位置列表(或者你可以说我有起始位置和窗口长度的列表)。在重要的情况下,由起始位置和结束位置形成的切片保证不重叠。我想弄清楚如何使用这些开始和结束位置来为另一个数组对象形成索引,而不必使用循环。
例如:
import numpy as np
start = np.array([1,7,20])
end = np.array([3,10,25])
想引用
somearray[1,2,7,8,9,20,21,22,23,24])
最佳答案
我会用
np.r_[tuple(slice(s, e) for s, e in zip(start, end))]
编辑:这是一个不使用 Python 循环的解决方案:
def indices(start, end):
lens = end - start
np.cumsum(lens, out=lens)
i = np.ones(lens[-1], dtype=int)
i[0] = start[0]
i[lens[:-1]] += start[1:]
i[lens[:-1]] -= end[:-1]
np.cumsum(i, out=i)
return i
这只会创建一个临时 NumPy 数组 (lens
),并且比任何其他解决方案都快得多。
关于python - 给定起始位置和结束位置列表构造 Numpy 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4707623/