我有一个X的多维numpy数组shape(B, dim, H, W)我想从k中随机采样dim X维向量。
我可以从形状为msk(B, 1, H, W)获取样本索引:

sIdx = random.sample((msk.flat>=0).nonzero()[0], k)


使用numpy的等效采样代码为:

sIdx = np.random.choice((msk.flat>=0).nonzero()[0], replace=False, size=(k,))


但是,如何根据“平坦的”采样索引X有效地切片sIdx
也就是说,是否有一种有效的方法将msk的随机采样与X的切片相结合?

最佳答案

从扁平化的索引中使用np.unravel_index获取这三个轴的其余部分的相应索引,然后简单地沿这些轴索引到X以获得最终输出,就像这样-

I,J,K = np.unravel_index(sIdx, (B, H, W))
out = X[I,:,J,K]

关于python - 来自numpy ndarray的有效样本向量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44899609/

10-13 00:04