我有一个 ND numpy 数组(例如 3x3x3),我想从中提取一个子数组,组合切片和索引数组。例如:
import numpy as np
A = np.arange(3*3*3).reshape((3,3,3))
i0, i1, i2 = ([0,1], [0,1,2], [0,2])
ind1 = j0, j1, j2 = np.ix_(i0, i1, i2)
ind2 = (j0, slice(None), j2)
B1 = A[ind1]
B2 = A[ind2]
我期望 B1 == B2,但实际上,形状不同
>>> B1.shape
(2, 3, 2)
>>> B2.shape
(2, 1, 2, 3)
>>> B1
array([[[ 0, 2],
[ 3, 5],
[ 6, 8]],
[[ 9, 11],
[12, 14],
[15, 17]]])
>>> B2
array([[[[ 0, 3, 6],
[ 2, 5, 8]]],
[[[ 9, 12, 15],
[11, 14, 17]]]])
有人明白为什么吗?知道如何通过仅操作“A”和“ind2”对象来获得“B1”吗?目标是它适用于任何 nD 数组,并且我不必寻找我想要完全保留的维度的形状(希望我足够清楚:))。谢谢!!
- -编辑 - -
更清楚地说,我想要一个“有趣”的功能,这样
A[fun(ind2)] == B1