我有一个数组A = np.ones((4,4,4))
和另一个数组,表示数组A中名为B的点的坐标,让我们假设B = [[2,2,2], [3,2,1]]
。
我试着像A[B]那样通过数组索引来访问A,但没有成功。
我怎么能以优雅的方式做到这一点,这也适用于B,它有更高的维度,比如形状的B(10,20,3(?
您可以传递坐标列表,但您应该转置列表。使得第i维度的项目作为索引中的第i-元素传递,例如:
A[tuple(np.transpose(B))]
对于4×4&次;4矩阵:
>>> A = np.arange(64).reshape(4,4,4)
>>> A
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, 25, 26, 27],
[28, 29, 30, 31]],
[[32, 33, 34, 35],
[36, 37, 38, 39],
[40, 41, 42, 43],
[44, 45, 46, 47]],
[[48, 49, 50, 51],
[52, 53, 54, 55],
[56, 57, 58, 59],
[60, 61, 62, 63]]])
我们得到给定坐标:
>>> A[tuple(np.transpose(B))]
array([42, 57])
如果我们手动计算,我们得到:
>>> A[2,2,2]
42
>>> A[3,2,1]
57
背景:
A[1,2,3]
是A[(1,2,3)]
的缩写(因此在元组中(。您可以使用A[([2,3], [2,2], [2,1])]
获取多个项目,但首先需要转置数据。
由于数据表示为[[2,2,2], [3,2,1]]
,因此我们首先需要将转换为[[2,3], [2,2], [2,1]]
。接下来,我们将它封装在一个元组中,并可以使用它为A
下下标。