如何通过点坐标列表访问数组



我有一个数组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下下标。

最新更新