我有一个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/