我知道多维numpy数组可以与其他数组一起索引,但是我没有弄清楚以下是如何工作的:
我想要一个3d numpy数组raster
中的项,它基于一个3d索引数组indx
:
raster=np.random.rand(5,10,50)
indx=np.random.randint(0, high=50, size=(5,10,3))
我想要的是另一个维度为
indx
的数组,它根据raster
的索引保存indx
的值。 最佳答案
我们需要两个数组a
和b
来正确解析广播期间的索引,以便raster[a[i,j,k],b[i,j,k],indx[i,j,k]]
在raster[i,j,indx[i,j,k]]
轴的相应范围内为i
、j
、k
。
最简单的解决方案是:
x,y,z = indx.shape
a,b,_ = np.ogrid[:x,:y,:z]
raster[a,b,indx]
其中
indx
创建三个具有形状np.ogrid[...]
、(x,1,1)
和(1,y,1)
的数组。我们不需要最后一个,所以把它扔掉。现在,当另外两个被(1,1,z)
广播时,它们的行为正是我们所需要的。关于python - 索引多维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31962683/