【发布时间】:2020-01-30 14:51:47
【问题描述】:
我有一个slices 列表,并使用它们来索引numpy 数组。
arr = np.arange(25).reshape(5, 5)
# array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14],
# [15, 16, 17, 18, 19],
# [20, 21, 22, 23, 24]])
slice_list = list(map(lambda i: slice(i, i+2), [1, 2]))
# [slice(1, 3, None), slice(2, 4, None)]
print(arr[slice_list])
# == arr[1:3, 2:4]
# [[ 7 8]
# [12 13]]
这工作正常,但如果我的切片少于维度数,它会中断 我要索引的数组。
arr3d = arr[np.newaxis, :, :] # dims: [1, 5, 5]
arr3d[:, slice_list]
# IndexError: only integers, slices (`:`), ellipsis (`...`),(`None`)
# numpy.newaxis and integer or boolean arrays are valid indices
以下示例仍然有效:
arr3d[:, slice_list[0], slice_list[1]]
arr3d[[slice(None)] + slice_list]
arr3d[:, [[1], [2]], [2, 3]]
有没有办法可以使用切片列表来索引具有更多维度的数组。 我想做这样的事情:
arr[..., slice_list]
arr[..., slice_list, :]
arr[:, slice_list, :]
不考虑数组的维度并计算出有多少[slice(None)]*X
我必须在我的slice_list 的两侧垫上。
【问题讨论】:
-
@user3483203 太棒了!
标签: python arrays numpy indexing