我目前正在尝试将大量数据拟合到正弦函数。在只有一个数据集(1D数组)的情况下,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
数据是一个三维数组(shape=(x,y,z)
),我想将每一行data[:,a,b]
拟合到函数中,其中param
是一个形状为(4,y,z)
的数组。当然,对于多维数据,这会导致以下错误:
ValueError: operands could not be broadcast together with shapes (2100,2100) (5)
也许有一个简单的解决方案,但我不确定该怎么做。有什么建议吗?
搜索答案证明很困难,因为大多数与这些关键字相关的主题都涉及更高维度的函数拟合。