numpy:索引3D数组,将最后一个轴的索引存储在2D数组中
问题内容:
我有一个ndarray
的shape(z,y,x)
含值。我想这个指数阵列的另一个ndarray
的shape(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_arr
以z_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_arr
有z_indices
没有创建一个全新的阵列。