Python numy数组/矩阵上的值置换

Python numy数组/矩阵上的值置换,python,arrays,numpy,Python,Arrays,Numpy,我正在寻找一个代码,加快排列矩阵的创建。 i、 例如,我想创建一个由n列组成的矩阵,其中每个列值迭代m个值,在每行上创建n^m个组合。 在下面的示例中,有两种方法创建矩阵,在这种情况下,n=7和m=5创建的矩阵类似于: 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 3 1 1 1 1 1 1 4 1 1 1 1 1 1 5 1 1 1 1 1 2 1 ... 5 5 5 5 5 5 5 行的顺序无关紧要,只是创建了所有的组合。 我已经编写了以下两种方法来创建数

我正在寻找一个代码,加快排列矩阵的创建。 i、 例如,我想创建一个由n列组成的矩阵,其中每个列值迭代m个值,在每行上创建n^m个组合。 在下面的示例中,有两种方法创建矩阵,在这种情况下,n=7和m=5创建的矩阵类似于:

1 1 1 1 1 1 1
1 1 1 1 1 1 2
1 1 1 1 1 1 3
1 1 1 1 1 1 4
1 1 1 1 1 1 5
1 1 1 1 1 2 1
...
5 5 5 5 5 5 5
行的顺序无关紧要,只是创建了所有的组合。 我已经编写了以下两种方法来创建数组,但是metod1非常慢(虽然非常详细,理解起来也很清楚),method2使用numpy函数更快。但我仍然需要找到一种更快的方法来创建矩阵

import numpy as np

############################################
def permArray_meth1():

    allArray = np.zeros((1,7))

    for a1  in range(1,6):
        for a2  in range(1,6):
            for a3  in range(1,6):
                for a4  in range(1,6):
                    for a5  in range(1,6):
                        for a6  in range(1,6):
                            for a7  in range(1,6):

                                allArray = np.append(allArray, np.array([a1,a2,a3,a4,a5,a6,a7]).reshape(1,7), axis=0)

    allArray = np.delete(allArray, 0, 0)
    return allArray

############################################
def permArray_meth2():

    ##### Create permutation matrix #####
    a = np.arange(np.power(5,7)).reshape(5,5,5,5,5,5,5)
    allArray = [(a1,a2,a3,a4,a5,a6,a7) for a1,a2,a3,a4,a5,a6,a7 in np.ndindex(a.shape)]

    ##### Convert list to array #####
    allArray = np.asarray(allArray)+1
    return allArray


############################################
if __name__ == "__main__":

    allArray = permArray_meth1()    #  (50sec)
    print 'allArray1', np.shape(allArray)

    allArray = permArray_meth2()    #  (1sec)
    print 'allArray2', np.shape(allArray)
我知道速度也取决于所用的CPU硬件,但我正在寻找一个相对更快的代码,如上图所示


是否有其他方法/代码?

您可以通过使用为第1列、第2列、…、第n列创建索引数组
(n,m,m,…,m)
,然后将输出重塑为
(n**m,n)
数组:

import numpy as np

def permgrid(m, n):
    inds = np.indices((m,) * n)
    return inds.reshape(n, -1).T
例如:

print(permgrid(2, 3))

# [[0 0 0]
#  [0 0 1]
#  [0 1 0]
#  [0 1 1]
#  [1 0 0]
#  [1 0 1]
#  [1 1 0]
#  [1 1 1]]

请问你想用矩阵做什么?你是在整个矩阵上应用函数还是逐行应用函数?@plonser,这只是逐行应用函数