如果要对一维数组 A
进行排列,您可以运行以下代码:
import numpy as np
A = np.random.permutation(A)
我有一个二维数组,想要对每一行应用完全相同的排列。有没有办法让numpy为您指定这样做?
如果要对一维数组 A
进行排列,您可以运行以下代码:
import numpy as np
A = np.random.permutation(A)
我有一个二维数组,想要对每一行应用完全相同的排列。有没有办法让numpy为您指定这样做?
生成A中列数的随机排列,并索引到A
的列中,如下所示 -
A[:,np.random.permutation(A.shape[1])]
样例运行 -
In [100]: A
Out[100]:
array([[3, 5, 7, 4, 7],
[2, 5, 2, 0, 3],
[1, 4, 3, 8, 8]])
In [101]: A[:,np.random.permutation(A.shape[1])]
Out[101]:
array([[7, 5, 7, 4, 3],
[3, 5, 2, 0, 2],
[8, 4, 3, 8, 1]])
a = np.array([
[3, 5, 7, 4, 7],
[2, 5, 2, 0, 3],
[1, 4, 3, 8, 8]
])
np.random.permutation(a)
,就会得到类似以下的结果:array([[2, 5, 2, 0, 3],
[3, 5, 7, 4, 7],
[1, 4, 3, 8, 8]])
附注:如果您需要执行列置换 - 只需执行np.random.permutation(a.T).T
。类似的方法也适用于多维数组。
这取决于您对每行的意思。
如果您想排列所有值(无论行和列),请将数组reshape为1d,然后进行排列,再reshape回2d。
如果您想对每行进行排列但不在不同列之间混洗元素,则需要遍历一个轴并调用permutation。
for i in range(len(A)):
A[i] = np.random.permutation(A[i])
可能有更简短的方法,但这就是实现它的方式。