【发布时间】:2010-11-15 12:56:50
【问题描述】:
在尝试对其进行任何复杂操作之前,我正在尝试遍历 6 参数函数的参数空间以研究其数值行为,因此我正在寻找一种有效的方法来执行此操作。
我的函数将 6 维 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
然后,我使用 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)
这可行,但它方式太慢了。我知道参数的空间很大,但这不应该这么慢。在这个例子中,我只采样了 106(一百万)个点,创建数组 values 需要超过 15 秒。
你知道用 numpy 更有效的方法吗?
如果有必要,我可以修改函数F 接受它的参数的方式。
【问题讨论】:
-
有关我发现的最快的笛卡尔积,请参阅this answer。 (由于这个问题的措辞与这个问题完全不同,我认为这些问题不是重复的,但两个问题的最佳解决方案是相同的。)
标签: python arrays numpy multidimensional-array cartesian-product