numpy:索引3D数组,将最后一个轴的索引存储在2D数组中


问题内容

我有一个ndarrayshape(z,y,x)含值。我想这个指数阵列的另一个ndarrayshape(y,x)包含我感兴趣的值的z-
index的。

import numpy as np
val_arr = np.arange(27).reshape(3,3,3)
z_indices = np.array([[1,0,2],
                      [0,0,1],
                      [2,0,1]])

由于我的数组很大,因此我尝试使用它np.take来避免不必要的数组副本,但无法用它来索引3维数组。

如何索引val_arrz_indices在所需的z轴位置获得值?预期结果将是:

result_arr = np.array([[9,1,20],
                       [3,4,14],
                       [24,7,17]])

问题答案:

您可以choose用来进行选择:

>>> z_indices.choose(val_arr)
array([[ 9,  1, 20],
       [ 3,  4, 14],
       [24,  7, 17]])

该功能choose非常有用,但要理解它可能有些棘手。本质上,给定一个数组(val_arr),我们可以z_indices沿第一个轴从每个n维切片中进行一系列选择()。

另外:任何花式索引操作都会创建一个新数组,而不是原始数据视图。这是不可能的指标val_arrz_indices没有创建一个全新的阵列。