【问题标题】:numpy select multiple ranges from a 1d arraynumpy 从一维数组中选择多个范围
【发布时间】:2020-12-18 06:09:48
【问题描述】:

假设我有一个一维数组:

T = np.array([1.3, 8.9, 1.4, 3.2, 4.4, 7.0, 2.0, 6.9]

我有一个起始索引列表:

I = np.array([5, 2, 4, 1])

对于每个起始索引,我想从起始索引处开始从T 中获取m 连续值。所以,m=3 的最终输出应该是一个二维数组:

T = np.array([[7.0, 2.0, 6.9],
              [1.4, 3.2, 4.4],
              [4.4, 7.0, 2.0],
              [8.9, 1.4, 3.2]])

我可以简单地遍历索引,但我希望有一种更有效的方法:

m = 3
out = np.empty((len(I), m))
for j, i in enumerate(I):
    out[j] = T[j : j+m]

【问题讨论】:

  • s = T; l = m; i = I 与链接的问答答案一起使用。

标签: python arrays numpy indexing


【解决方案1】:

这是一个不需要安装额外依赖的答案:

def rolling_window(a, window):
    a = np.asarray(a)
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)

    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)

m = 3
rolling_T = rolling_window(T, m)  # Note that this is a very efficient view
out = rolling_T[I]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2023-03-16
    • 2017-09-10
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多