在特定维度上的numpy数组中选择索引

时间:2018-08-24 14:11:08

标签: python arrays numpy indexing

很难找到清晰的标题,但是通过示例可以清楚地说明。 例如,我的输入是:

c = np.full((4, 3, 2), 5)
c[:,:,1] *= 2

ix = np.random.randint(0, 2, (4, 3))

如果ix是:

array([[1, 0, 1],
       [0, 0, 1],
       [0, 0, 1],
       [1, 1, 0]])

如果需要的话:

array([[10,  5, 10],
       [ 5,  5, 10],
       [ 5,  5, 10],
       [10, 10,  5]])

我的c数组可以是任意维度,也可以是我要采样的维度。

这听起来像插值法,但是每次我要应用此索引时,我都不愿意构造一个be数组。有没有一种方法可以在numpy数组上使用某种索引?还是我必须使用一些插值方法... 速度和内存是这里要考虑的问题,因为我必须做很多次,而且数组可能真的很大。

感谢您的见解!

1 个答案:

答案 0 :(得分:3)

使用numpy.ogrid创建x,y索引,然后使用advanced indexing

idx, idy = np.ogrid[:c.shape[0], :c.shape[1]]
c[idx, idy, ix]

#array([[10,  5, 10],
#       [ 5,  5, 10],
#       [ 5,  5, 10],
#       [10, 10,  5]])