使用索引提取值数组

Extract values array using indices

我需要从多维数组中提取某些非后续值。

import numpy as np    
A = np.array([[[ 0.,          4.,          0.        ],
               [ 0.19230769,  4.03846154,  0.        ],
               [-0.4,         4.8,         0.        ],
               [ 2.,          1.,          0.        ]],

              [[ 1.2,         3.4,         0.        ],
               [ 2.11538462,  4.42307692,  0.        ],
               [ 0.,          4.,          0.        ],
               [ 3.6,         1.8,         0.        ]],

              [[ 1.8,         3.1,         0.        ],
               [ 3.17307692,  4.63461538,  0.        ],
               [ 0.,          4.,          0.        ],
               [ 4.,          2.,          0.        ]]])

对于每个 4x3 块,我想提取任意行

例如以下元素:

A[0,2,:]
A[1,1,:]
A[2,1,:]

所以基本上行B = [2,1,1],这会给我:

[-0.4         4.8         0.        ]
[ 2.11538462  4.42307692  0.        ]
[ 3.17307692  4.63461538  0.        ]

如何有效地做到这一点?

你可以使用 "advanced indexing":

In [99]: A[[0,1,2], [2,1,1], :]
Out[99]: 
array([[-0.4       ,  4.8       ,  0.        ],
       [ 2.11538462,  4.42307692,  0.        ],
       [ 3.17307692,  4.63461538,  0.        ]])

这里的索引数组是

ind1 = [0, 1, 2]
ind2 = [2, 1, 1]

并且由于 ind1 正在索引 A 的第一个轴并且 ind2 正在索引第二个轴,并且第三个轴被完全切片(: ),结果数组 result 具有与 ind1ind2 相同的形状——即 (3,)——加上完全切片轴的形状,这也是(3,)。因此,result.shape(3, 3)

result[i, j] = A[ind1[i], ind2[i], j]

对于 i = 0,1,2j = 0,1,2