python - Python中对称数组的排列

标签 python numpy permutation

我想要这个对称矩阵的排列,如果我们将第二列移动到第三列,第二行也应该移动到第三行。

array([[ 0.        ,  0.06377803,  0.1157737 ,  0.19542195],
       [ 0.06377803,  0.        ,  0.14754803,  0.23185761],
       [ 0.1157737 ,  0.14754803,  0.        ,  0.0843134 ],
       [ 0.19542195,  0.23185761,  0.0843134 ,  0.        ]])

这是列表上的排列代码:

import numpy as np
x=[]
def perm(a, k=0):

    if k == len(a):
        x.extend(a)
#        print (a )


    else:
      for i in range(k, len(a)):
         a[k], a[i] = a[i] ,a[k]
         perm(a, k+1)
         a[k], a[i] = a[i], a[k]

perm([0,1,2,3])
a=np.asarray(x).reshape((24,4))
print(a)

输出:

[[0 1 2 3]
 [0 1 3 2]
 [0 2 1 3]
 [0 2 3 1]
 [0 3 2 1]
 [0 3 1 2]
 [1 0 2 3]
 [1 0 3 2]
 [1 2 0 3]
 [1 2 3 0]
 [1 3 2 0]
 [1 3 0 2]
 [2 1 0 3]
 [2 1 3 0]
 [2 0 1 3]
 [2 0 3 1]
 [2 3 0 1]
 [2 3 1 0]
 [3 1 2 0]
 [3 1 0 2]
 [3 2 1 0]
 [3 2 0 1]
 [3 0 2 1]
 [3 0 1 2]]

但是我想要上面的数组的排列,即 4*4。为了简单起见,如果我们有一个 3*3 数组,我们想要如下所示的 K!=6,但是当 k=4 时,我们必须得到 k!这是 24 种排列

enter image description here

最佳答案

import numpy as np
from itertools import permutations

n = 3
a = np.arange(n**2).reshape(n, n)

for perm in permutations(range(a.shape[0])):
    b = np.zeros_like(a)
    b[:, :] = a[perm, :]
    b[:, :] = b[:, perm]
    print(b)

给出以下 6 个矩阵:

[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0 2 1]
 [6 8 7]
 [3 5 4]]
[[4 3 5]
 [1 0 2]
 [7 6 8]]
[[4 5 3]
 [7 8 6]
 [1 2 0]]
[[8 6 7]
 [2 0 1]
 [5 3 4]]
[[8 7 6]
 [5 4 3]
 [2 1 0]]

这是个问题吗?

关于python - Python中对称数组的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155783/

相关文章:

python - 使用 trie 在 python 中创建目录结构

python - 如何检查用户是否点击了 Selenium 中的按钮?

python - 使用 NumPy 广播的 View

python - 如何获得这个组合列表?

algorithm - SPOJ :Card Shuffling

python - 如何解决 VS 代码中没有名为 'selenium' 的模块?

Python/Keras/Theano - 值错误 : Dimension mismatch; shapes are (98, 10), (98, 1)

python - 寻找大矩阵最小二乘解的更快方法

python - 字符串中的一个热点 - 获取唯一值列表中的索引

python - 如何确定嵌套列表结构是否与另一个相同,但元素交换为新的