在numpy数组的列中独立地进行随机播放

时间:2018-03-22 10:42:49

标签: python arrays numpy shuffle

我有一个numpy数组格式

[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]

每列代表一个数据通道,我需要在其他通道的独立列中对每列的内容进行随机播放。据我所知numpy.random.shuffle只沿阵列的第一轴移动,即。随机播放数组中行的顺序。在每一栏中进行独立洗牌的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我们可以为每个列生成唯一的行索引,并使用advanced-indexing将索引编入到输入数组中。要生成唯一索引,我们将使用random float generation + sort trick,从而为我们提供矢量化解决方案,如此 -

idx = np.random.rand(*a.shape).argsort(0)
out = a[idx, np.arange(a.shape[1])]

通用版

我们可以将其概括为涵盖通用n-dim数组以及通用axesnp.take_along_axis,并最终列出this post中列出的内容。