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)
如何实现这一目标?
答案 0 :(得分:3)
使用broadcasted
添加来创建所有这些索引然后索引 -
all_idx = ids[:,None]+range(4) # or np.add.outer(ids, range(4))
out = arr[all_idx]
使用基于np.lib.stride_tricks.as_strided
的strided_app
-
strided_app(arr, 4, S=1)[ids]