python - 给定起始位置和结束位置列表构造 Numpy 索引

标签 python numpy

我有两个相同大小的 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/

相关文章:

python - 如何找到数据框特定列值的不同计数

c# - IronPython 在线程中使用 numpy 时抛出 InsufficientMemoryException

python:二维矩阵中更快的局部最大值

python - 如何用Numpy Python获取多张图像的RGB单 channel 平均值?

python - 沿 NumPy 数组的轴计算唯一元素

python - 添加键的值并根据键在 Python 字典列表中的出现对其进行排序

python - Vim python 语法高亮显示在很长的行中挂起

python - numpy - ndarray - 如何删除基于另一个数组的行

python - 根据 python pandas 数据框中列的状态变化将时间序列数据分成组

python - 查找嵌套子列表中的值是否大于 Pandas 列中的 X