在numpy数组的列中独立洗牌

2024-06-16 12:12:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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只会沿着数组的第一个轴进行无序排列,也就是说,会对数组中的行进行无序排列。在每列中进行独立洗牌的最佳方式是什么?在


Tags: numpy内容格式方式代表random数组无序
1条回答
网友
1楼 · 发布于 2024-06-16 12:12:49

我们可以为每一列生成唯一的行索引,并用advanced-indexing索引到输入数组中。为了生成唯一的索引,我们将使用^{} trick,从而给我们一个矢量化的解决方案,如-

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

通用版本

我们可以将其泛化为覆盖泛型n-dim数组,并将axes与{a2}一起使用,最终得到^{}中列出的内容。在

相关问题 更多 >