首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matlab的perms的Python等价物

matlab的perms的Python等价物
EN

Stack Overflow用户
提问于 2016-07-01 01:44:13
回答 3查看 789关注 0票数 0

matlab的perms函数在numpy或scipy中有没有等价的方法?在matlab中,perms以相反的字典序返回输入的所有可能排列的矩阵。

EN

回答 3

Stack Overflow用户

发布于 2016-07-01 01:46:22

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

票数 3
EN

Stack Overflow用户

发布于 2018-03-12 03:44:13

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

代码语言:javascript
复制
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数组:

代码语言:javascript
复制
>array([[ 0.,  1.,  2.],
       [ 0.,  2.,  1.],
       [ 1.,  0.,  2.],
       [ 1.,  2.,  0.],
       [ 2.,  0.,  1.],
       [ 2.,  1.,  0.]])
票数 1
EN

Stack Overflow用户

发布于 2021-02-12 05:51:39

这个实现与前面的答案类似,但它以相反的字典序返回数组,以便与MATLAB的perms更接近。

代码语言:javascript
复制
import numpy as np
import itertools

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

用法:

代码语言:javascript
复制
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]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38130008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档