scipy Python:interpolate.UnivariateSpline package 'error:(xb< =x[0])failed for 2nd keyword xb:fpcurf0:xb=3.78832'

3npbholx  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(137)

我一直试图绘制一条线,沿着样条拟合。以下是我的代码的一般化版本。“波长”和“吸光度”是包含浮点值列表的列表。我的代码的一般化版本:

import matplotlib.pyplot as plt
import csv
from scipy.interpolate import UnivariateSpline
s = UnivariateSpline(wavelength, absorbance,bbox=[p[0][0],b[0][0]],s = 5)
n1 = len(wavelength)
xs = np.linspace(wavelength[0], wavelength[-1], n1*100)
ys = s(xs)
s.set_smoothing_factor(0.8)

plt.plot(wavelength, absorbance, 'o')
plt.plot(xs, ys,lw=3)
plt.show()

字符串
我现在得到一个错误消息:

Cell In[125], line 1
----> 1 plot3(r'C:\\Users\\meng.zu\\Desktop\\convert 
data\\D1_17.1.SSC.txt',None,None,None)

Cell In[124], line 57, in plot3(path, c, y, k)
 50             b.append([i,j])
 51             break
 ---> 57 s = UnivariateSpline(wavelength, absorbance,bbox=[p[0] 
 [0],b[0][0]],s = 5)
 58 n1 = len(wavelength)
 59 xs = np.linspace(wavelength[0], wavelength[-1], n1*100)

 File D:\Anaconda\Lib\site-packages\scipy\interpolate\_fitpack2.py:221, in UnivariateSpline.__init__(self, x, y, w, bbox, k, s, ext, check_finite)
217 x, y, w, bbox, self.ext = self.validate_input(x, y, w, bbox, k, s, ext,
218                                               check_finite)
220 # _data == x,y,w,xb,xe,k,s,n,t,c,fp,fpint,nrdata,ier
--> 221 data = dfitpack.fpcurf0(x, y, k, w=w, xb=bbox[0],
222                         xe=bbox[1], s=s)
223 if data[-1] == 1:
224     # nest too small, setting to maximum bound
225     data = self._reset_nest(data)

error: (xb<=x[0]) failed for 2nd keyword xb: fpcurf0:xb=3.78832


其中p[0][0]和B[0][0]是两个浮点数,并且p[0][0] < B[0][0]
如果我不设置bbox范围,它看起来像这样:fit line without setting bbox range然而,我希望它适 symfony 值曲线区域,所以我设置了峰值周围的间隔来拟合它。这就是错误发生的地方。
以下是p[0][0]、B[0][0]和x[0]的值:

(3.7883158772582326, 4.035764192724556, 2.859500138756903).


我试着查找所有可能的资源,但找不到像这样的相关问题。
任何建议或意见将不胜感激!

bz4sfanl

bz4sfanl1#

我猜这是你正在使用的一个库抛出的一个明确的错误,本质上这不是你的代码失败,而是你的数据有问题。
(xb<=x[0])似乎是导致失败的原因。xb的值是3.78832。我不知道x[0]的值是多少,但我猜xb需要小于它。
似乎和边界框有关。

相关问题