python - 在 numpy 数组的列内独立洗牌

标签 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.]]

每一列代表一个数据通道,我需要独立于其他 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/

相关文章:

arrays - 如何在 awk 中打印/存储数组中的重复值

python - 使用 Python 2.7.x 在 Windows 8.1 上安装 NumPy

python - ValueError : Input contains NaN, 无穷大或值对于 dtype ('float32' 太大)。为什么?

matlab - 如何获取 numpy 数组的线性索引 (sub2ind)

python - 尝试启动 uwsgi 时出现致命的 Python 错误 : init_fs_encoding: failed to get the Python codec of the filesystem encoding,

javascript - 随机数组生成的意外行为

c - C中的结构数组初始化

python - 使用 ManyToMany 字段获取或创建 Django 模型

python - 如何在 Pandas 中进行左外连接排除

Java程序显示Python的连续输出