我有一个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
只沿阵列的第一轴移动,即。随机播放数组中行的顺序。在每一栏中进行独立洗牌的最佳方法是什么?
答案 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
数组以及通用axes
和np.take_along_axis
,并最终列出this post
中列出的内容。