Python相当于matlab的perms

时间:2016-06-30 17:44:13

标签: python matlab numpy scipy

对于matlab的perms函数,是否存在numpy或scipy的等效方法?在matlab中,perms以反向字典顺序返回输入的所有可能排列的矩阵。

3 个答案:

答案 0 :(得分:3)

Python有一个名为itertools.permutations的内置函数。你可以在python中的任何iterable上调用它,它返回所有的全长排列。

答案 1 :(得分:0)

我写了一个更详细的例子,因为我不清楚如何用第一个答案来实现它:

import numpy as np
import itertools    
MyArray = np.arange(3)
permut = itertools.permutations(MyArray)
permut_array = np.empty((0,3))
for p in permut:
    permut_array = np.append(permut_array,np.atleast_2d(p),axis=0)

这将返回一个numpy排列数组:

>array([[ 0.,  1.,  2.],
       [ 0.,  2.,  1.],
       [ 1.,  0.,  2.],
       [ 1.,  2.,  0.],
       [ 2.,  0.,  1.],
       [ 2.,  1.,  0.]])

答案 2 :(得分:0)

此实现与之前的答案类似,但它以反向字典顺序返回数组,以更紧密地匹配 MATLAB 的 perms

import numpy as np
import itertools

def perms(x):
    """Python equivalent of MATLAB perms."""
    return np.vstack(list(itertools.permutations(x)))[::-1]

用法:

In [1]: perms(range(3))
Out[1]:
array([[2, 1, 0],
       [2, 0, 1],
       [1, 2, 0],
       [1, 0, 2],
       [0, 2, 1],
       [0, 1, 2]])