随机播放一个方形的numpy数组,但保留行和列索引之间的对应关系

问题描述

例如,如果我有一个方形的对称的矩阵,

[[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]])

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...