2016-11-04 39 views
1

我有以下形狀陣列NumPy的高級索引

voxel_grids : (128, 32, 32, 32) 
indices : (128, 3, 1024) 

我想構建一個陣列scalar (128, 1024)這樣

scalar[i,j] = voxel_grids[i, indices[i, 0, j], indices[i, 1, j], indices[i,2,j]] 

有沒有一種簡單的方法來做到這一點使用numpy的(高級)索引?

回答

1

你可以做這樣的事情 -

m = voxel_grids.shape[0] 
out = voxel_grids[np.arange(m)[:,None],indices[:,0],indices[:,1],indices[:,2]] 

其他的方法是從indices三片提取到三個變量,並利用它們進行索引。這可能不像以前那樣高效,但眼睛可能會更容易一些。如下所示 -

m = voxel_grids.shape[0] 
x,y,z = indices.swapaxes(0,1) 
out = voxel_grids[np.arange(m)[:,None],x,y,z]