我有一个numpy数组[0,1,1,2,2,0,1,...]只包含数字0-k.我想创建一个新的数组,其中包含n个可能的0-k排列数组.k = 2且n = 6的小例子:
a = [0, 1, 0, 2]
permute(a)
result = [[0, 1, 0, 2]
[0, 2, 0, 1]
[1, 0, 1, 2]
[2, 1, 2, 0]
[1, 2, 1, 0]
[2, 0, 2, 1]]
Run Code Online (Sandbox Code Playgroud)
有没有人有任何关于如何实现这一目标的想法/解决方案?
Bil*_*ell 19
你的a是组合者称之为multiset的东西.该sympy库中有与他们一起工作的各种程序.
>>> from sympy.utilities.iterables import multiset_permutations
>>> import numpy as np
>>> a = np.array([0, 1, 0, 2])
>>> for p in multiset_permutations(a):
... p
...
[0, 0, 1, 2]
[0, 0, 2, 1]
[0, 1, 0, 2]
[0, 1, 2, 0]
[0, 2, 0, 1]
[0, 2, 1, 0]
[1, 0, 0, 2]
[1, 0, 2, 0]
[1, 2, 0, 0]
[2, 0, 0, 1]
[2, 0, 1, 0]
[2, 1, 0, 0]
Run Code Online (Sandbox Code Playgroud)
hir*_*ist 13
如果您的排列符合内存,则可以将它们存储在a中set,从而只获得可区分的排列.
from itertools import permutations
a = [0, 1, 0, 2]
perms = set()
for perm in permutations(a):
perms.add(perm)
print(perms)
Run Code Online (Sandbox Code Playgroud)
或者 - 由John Coleman精心制作- 在一行中:
perms = set(permutations(a))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19640 次 |
| 最近记录: |