问题描述
例如,如果我有一个方形的对称的矩阵,
[[0 3 2]
[3 8 4]
[2 4 5]]
我不想只对行或列进行随机播放。相反,
我怎么做,例如 (不是按照严格的顺序,而是随机的):
- 将numpy中的矩阵改组,以使行和的第1列一起移至行和第3的列,
- 将行和的第3列移至第2列和第
- 以及行和第2列移至第1行和第1列
解决方法
您要的东西可以通过所谓的矩阵共轭来完成:
perm_mat = np.random.permutation(np.eye(len(a),dtype=np.int))
out = (perm_mat @ a) @ (np.linalg.inv(perm_mat))
输出(当然是随机的):
array([[8.,4.,3.],[4.,5.,2.],[3.,2.,0.]])
或者可以通过切片来完成:
np.random.seed(1)
orders = np.random.permutation(np.arange(len(a)))
a[orders][:,orders]
输出:
array([[0,2,3],[2,5,4],[3,4,8]])