我有一个格式为 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.]]
每一列代表一个数据通道,我需要独立于其他 channel 对该列中每一列的内容进行洗牌。我明白numpy.random.shuffle
仅沿数组的第一个轴进行洗牌,即。打乱数组中行的顺序。在每列中进行独立洗牌的最佳方法是什么?
最佳答案
我们可以为每列生成唯一的行索引,并使用高级索引
索引到输入数组中。为了生成唯一索引,我们将使用 random float generation + sort
trick ,从而为我们提供了一个矢量化解决方案,如下所示 -
idx = np.random.rand(*a.shape).argsort(0)
out = a[idx, np.arange(a.shape[1])]
通用版本
我们可以将其概括为涵盖通用 n-dim
数组以及通用轴
np.take_along_axis
并最终得到 this post
中列出的内容.
关于python - 在 numpy 数组的列内独立洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49426584/