我正在尝试评估卡方函数,即将任意(黑盒)函数与数据的 numpy 向量数组进行比较。目前我正在循环遍历python中的数组,但是这样的事情非常慢:
n=len(array)
sigma=1.0
chisq=0.0
for i in range(n):
data = array[i]
model = f(i,a,b,c)
chisq += 0.5*((data-model)/sigma)**2.0
return chisq
array 是一维 numpy 数组, a,b,c 是标量。有没有办法通过使用 numpy.sum() 或某种 lambda 函数等来加快速度?我可以看到如何像这样删除一个循环(通过 chisq):
numpy.sum(((array-model_vec)/sigma)**2.0)
但是我仍然需要显式地填充数组 model_vec,这可能会很慢;如果没有这样的显式循环,我该怎么做:
model_vec=numpy.zeros(len(data))
for i in range(n):
model_vec[i] = f(i,a,b,c)
return numpy.sum(((array-model_vec)/sigma)**2.0)
?
谢谢!