很难找到清晰的标题,但是通过示例可以清楚地说明。 例如,我的输入是:
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数组上使用某种索引?还是我必须使用一些插值方法... 速度和内存是这里要考虑的问题,因为我必须做很多次,而且数组可能真的很大。
感谢您的见解!
答案 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]])