matlab的perms函数在numpy或scipy中有没有等价的方法?在matlab中,perms以相反的字典序返回输入的所有可能排列的矩阵。
发布于 2016-07-01 01:46:22
Python有一个名为itertools.permutations的内置函数。你可以在python中的任何iterable上调用它,它会返回所有的全长排列。
发布于 2018-03-12 03:44:13
我写了一个更详细的例子,因为我不清楚如何使用第一个答案来实现它:
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.]])发布于 2021-02-12 05:51:39
这个实现与前面的答案类似,但它以相反的字典序返回数组,以便与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]])https://stackoverflow.com/questions/38130008
复制相似问题