如何在Python中生成列表的所有排列,与该列表中的元素类型无关?
例如:
permutations([])
[]
permutations([1])
[1]
permutations([1, 2])
[1, 2]
[2, 1]
permutations([1, 2, 3])
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud) 我试图在6参数函数的参数空间上运行以研究它的数值行为,然后再尝试做任何复杂的事情,所以我正在寻找一种有效的方法来做到这一点.
给定6-dim numpy数组作为输入,我的函数采用浮点值.我最初尝试做的是:
首先,我创建了一个函数,它接受2个数组并生成一个数组,其中包含来自两个数组的所有值组合
from numpy import *
def comb(a,b):
c = []
for i in a:
for j in b:
c.append(r_[i,j])
return c
Run Code Online (Sandbox Code Playgroud)
然后我习惯reduce()将它应用于相同数组的m个副本:
def combs(a,m):
return reduce(comb,[a]*m)
Run Code Online (Sandbox Code Playgroud)
然后我评估我的功能如下:
values = combs(np.arange(0,1,0.1),6)
for val in values:
print F(val)
Run Code Online (Sandbox Code Playgroud)
这有效,但它太慢了.我知道参数的空间很大,但这不应该太慢.在这个例子中我只抽取了10 6(一百万)个点,并且创建数组花了超过15秒values.
你知道用numpy做这个更有效的方法吗?
F如果有必要,我可以修改函数获取它的参数的方式.