从1D阵列中提取子阵列给定的启动指数-Python / numpy



numpy数组可以用其他数组索引。说明:

>>> import numpy as np
>>> arr = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0et ], 'f4')
>>> ids = np.array([0, 2], 'i4')
arr[ids]
array([ 0.,  2.], dtype=float32)

但是,如果我想拥有一个由索引指向的值以及三个后续元素指向的值怎么办?

>>> arr[ids:(ids+4)]
Traceback (most recent call last):
  File "<console>", line 1, in <module>
IndexError: invalid slice

预期:

array([[0. 1. 2. 3.], [2. 3. 4. 5.]], dtype=float32)

如何使此操作成为可能?

使用broadcasted添加以创建所有这些索引,然后索引 -

all_idx = ids[:,None]+range(4) # or np.add.outer(ids, range(4))
out = arr[all_idx]

使用基于np.lib.stride_tricks.as_stridedstrided_app-

strided_app(arr, 4, S=1)[ids]

最新更新