【发布时间】:2017-12-07 13:13:34
【问题描述】:
我有一个多维 numpy 数组 X 的 shape: (B, dim, H, W) 我想从 X 中随机抽样 k dim 维向量。
我可以从形状为(B, 1, H, W) 的msk 获取样本索引:
sIdx = random.sample((msk.flat>=0).nonzero()[0], k)
使用numpy 的等效采样代码为:
sIdx = np.random.choice((msk.flat>=0).nonzero()[0], replace=False, size=(k,))
但是我怎样才能有效地根据“平坦”采样索引sIdx 对X 进行切片?
也就是msk的随机抽样和X的切片有没有一种有效的方法?
【问题讨论】:
-
random是否来自模块random?最终输出的形状是什么? -
@Divakar 是的,
sample来自random模块。采样可以替换为sIdx = np.random.choice((msk.flat>=0).nonzero()[0], replace=False, size=(k,)) -
@Divakar 我期望的最终输出是
shapek-by-dim。 -
@NilsWerner 谢谢你的回答。我尽量避免
reshape和transpose。
标签: numpy python numpy multidimensional-array random slice