4我目前正在尝试将大量数据拟合到正弦函数中。在我只有一组数据(一维数组)的情况下,scipy.optimize.curve_fit()
工作正常。但是,据我所知,如果函数本身只是一维的,则它不允许更高维的数据输入。我不想使用 for 循环遍历数组,因为这在 python 中运行速度非常慢。
到目前为止,我的代码应该类似于:
from scipy import optimize
import numpy as np
def f(x,p1,p2,p3,p4): return p1 + p2*np.sin(2*np.pi*p3*x + p4) #fit function
def fit(data,guess):
n = data.shape[0]
leng = np.arange(n)
param, pcov = optimize.curve_fit(f,leng,data,guess)
return param, pcov
其中 data 是一个三维数组 ( shape=(x,y,z)
),我想将每一行拟合data[:,a,b]
到函数中,并将param
其(4,y,z)
作为输出。当然,对于多维数据,这会导致
ValueError: operands could not be broadcast together with shapes (2100,2100) (5)
也许有一个简单的解决方案,但我不知道该怎么做。有什么建议么?
搜索我的问题的答案非常困难,因为大多数带有这些关键字的主题都与高维函数的拟合有关。