创建置换矩阵 - numpy

Apo*_*llo 6 python numpy

给定一个整数,k我如何创建一个包含序列1to的所有可能排列的排列矩阵k?例如,让我们考虑一下k=2. 然后我想创建矩阵:

1 2
2 1
Run Code Online (Sandbox Code Playgroud)

和对于k=3

1 1 2 2 3 3
2 3 1 3 1 2 
3 2 3 1 2 1
Run Code Online (Sandbox Code Playgroud)

我尝试过使用,numpy.random.permutation但这只会产生一个排列。因此,我可以继续使用这个函数,附加唯一的排列,直到列数等于,k!但这似乎效率非常低。

Fel*_*ema 1

基于这个答案

import numpy as np
import itertools as it
import math
def myPerms(k):
  f_k=math.factorial(k)
  A=np.empty((k,f_k))
  for i,perm in enumerate(it.permutations(range(k))):
    A[:,i] = perm
  A+=1
  return A

print(myPerms(3))
#[[ 1.  1.  2.  2.  3.  3.]
# [ 2.  3.  1.  3.  1.  2.]
# [ 3.  2.  3.  1.  2.  1.]]
Run Code Online (Sandbox Code Playgroud)