使用numpy构建两个数组的所有组合的数组我试图通过6参数函数的参数空间来研究它的数值行为,然后再尝试做任何复杂的事情,所以我正在寻找一种有效的方法来做到这一点。我的函数以浮点值作为输入,给定一个6昏暗的numpy数组。我最初想做的是:首先,我创建了一个函数,该函数接受两个数组,并从两个数组生成一个包含所有值组合的数组。from numpy import *def comb(a,b):
c = []
for i in a:
for j in b:
c.append(r_[i,j])
return c然后我用reduce()若要将其应用于同一个数组的m个副本,请执行以下操作:def combs(a,m):
return reduce(comb,[a]*m)然后我像这样评估我的功能:values = combs(np.arange(0,1,0.1),6)for val in values:
print F(val)这个很管用,但太慢了。我知道参数的空间很大,但这不应该太慢。我只取样了10个6(100万个)在这个例子中,创建数组花费了超过15秒的时间。values.你知道用Numpy做这件事的更有效的方法吗?我可以修改函数的方式F如果有必要的话这就是争论。
3 回答

烙印99
TA贡献1829条经验 获得超13个赞
numpy
numpy.meshgrid()
In [113]:%timeit cartesian(([1, 2, 3], [4, 5], [6, 7]))10000 loops, best of 3: 135 µs per loopIn [114]: cartesian(([1, 2, 3], [4, 5], [6, 7]))Out[114]:array([[1, 4, 6], [1, 4, 7], [1, 5, 6], [1, 5, 7], [2, 4, 6], [2, 4, 7], [2, 5, 6], [2, 5, 7], [3, 4, 6], [3, 4, 7], [3, 5, 6], [3, 5, 7]])
numpy.meshgrid()
In [115]:%timeit np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)10000 loops, best of 3: 74.1 µs per loopIn [116]: np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)Out[116]:array([[1, 4, 6], [1, 5, 6], [2, 4, 6], [2, 5, 6], [3, 4, 6], [3, 5, 6], [1, 4, 7], [1, 5, 7], [2, 4, 7], [2, 5, 7], [3, 4, 7], [3, 5, 7]])

四季花海
TA贡献1811条经验 获得超5个赞
product
permutations
for val in itertools.product(np.arange(0, 1, 0.1), repeat=6): print F(val)
添加回答
举报
0/150
提交
取消