【发布时间】:2021-03-22 19:12:16
【问题描述】:
我正在尝试为从 .mat 文件导入的数据拟合正弦曲线。
from scipy.io import loadmat
data=loadmat('TP4.mat')
x_data=data['x']
y_data=data['y']
def TEST(x,a,b):
return (a*np.sin(b*x))
params2,params_covariance2=optimize.curve_fit(TEST,x_data,y_data)
我已经搜索了一个小时的原因,但它返回了错误:
params2,params_covariance2=optimize.curve_fit(TEST,x_data,y_data)
File "D:\python\lib\site-packages\scipy\optimize\minpack.py", line 784, in curve_fit
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
File "D:\python\lib\site-packages\scipy\optimize\minpack.py", line 414, in leastsq
raise TypeError('Improper input: N=%s must not exceed M=%s' % (n, m))
TypeError: Improper input: N=2 must not exceed M=1
有人知道为什么它会继续使用 curve_fit 吗?
x_data 是一个数组 (1,50):
[[-5. -4.79591837 -4.59183673 -4.3877551 -4.18367347 -3.97959184
-3.7755102 -3.57142857 -3.36734694 -3.16326531 -2.95918367 -2.75510204
-2.55102041 -2.34693878 -2.14285714 -1.93877551 -1.73469388 -1.53061224
-1.32653061 -1.12244898 -0.91836735 -0.71428571 -0.51020408 -0.30612245
-0.10204082 0.10204082 0.30612245 0.51020408 0.71428571 0.91836735
1.12244898 1.32653061 1.53061224 1.73469388 1.93877551 2.14285714
2.34693878 2.55102041 2.75510204 2.95918367 3.16326531 3.36734694
3.57142857 3.7755102 3.97959184 4.18367347 4.3877551 4.59183673
4.79591837 5. ]]
而且 y_data 也是一个数组 (1,50):
[[ 1.93850755 3.90748334 0.74775799 3.80239638 3.32772828 2.71107852
2.85786376 2.50109072 2.62484054 0.11701355 -1.34835766 -1.03896612
-1.82007581 -1.49086175 -2.56849896 -4.68713822 -3.15843002 -2.77910422
-2.87940036 1.73778484 0.31566242 1.81945211 2.58367122 3.26765109
1.79831117 3.35824518 4.25703245 0.96006812 1.24266396 0.75338212
-0.70009445 -1.12690812 -1.09354647 -3.46942727 -3.67550846 -4.53297036
-2.55420957 -2.87671367 -2.33624323 -1.37104854 1.36564919 1.61563281
2.46671249 2.6525523 2.4522091 2.96971773 2.56662355 3.35746594
2.03000529 2.81887444]]
【问题讨论】:
-
由于随机测试数据不会出现此问题,因此建议您提供重现此错误的玩具数据集。你确定你的输入数据是一维数组并且有足够的长度吗?
-
x_data 是一个数组 (1,50):y_data 也是如此
-
啊,原来如此。 Reshape your data 到
(50,),一切都会好起来的。好吧,不是全部。但是不会出现这个特定的错误信息。最好从一开始就以不同的方式读取数据,但我不知道loadmat,所以我这边没有建议。 Here is a good explanation of array shapes.
标签: python matplotlib scipy scipy-optimize