Python scipy.signal.savgol_滤波器的假值错误

Python scipy.signal.savgol_滤波器的假值错误,python,pandas,scipy,filtering,Python,Pandas,Scipy,Filtering,我很困惑。我有21个文件是由同一个过程生成的,我使用savitzky-golay过滤器以相同的参数对它们进行过滤。 它对某些文件正常工作,但在某些时候,我收到了ValueError:array不能包含infs或NaNs。问题是,我检查了文件,没有任何INF或NAN print "nan", df.isnull().sum() print "inf", np.isinf(df).sum() 给予 那么问题可能出在过滤器的实现上?例如,这可能是由于选择了与数据长度或步长相关的窗口长度或多阶数造成的

我很困惑。我有21个文件是由同一个过程生成的,我使用savitzky-golay过滤器以相同的参数对它们进行过滤。 它对某些文件正常工作,但在某些时候,我收到了
ValueError:array不能包含infs或NaNs
。问题是,我检查了文件,没有任何INF或NAN

print "nan", df.isnull().sum()
print "inf", np.isinf(df).sum()
给予

那么问题可能出在过滤器的实现上?例如,这可能是由于选择了与数据长度或步长相关的窗口长度或多阶数造成的吗

完全回溯:

Traceback (most recent call last):

  File "<ipython-input-7-40b33049ef41>", line 1, in <module>
    runfile('D:/data/scripts/DailyProfiles_Gradients.py', wdir='D:/data/DFDP2/DFDP2B/DTS/DTS_scripts')

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile
    execfile(filename, namespace)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "D:/data/scripts/DailyProfiles_Gradients.py", line 142, in <module>
    grad = gradient(y, x, scale,PO)

  File "D:/data/scripts/DailyProfiles_Gradients.py", line 76, in Tgradient
    smoothed=savgol_filter(list(x), scale, PO, deriv=1, delta=dy[0])

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\signal\_savitzky_golay.py", line 337, in savgol_filter
    coeffs = savgol_coeffs(window_length, polyorder, deriv=deriv, delta=delta)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\signal\_savitzky_golay.py", line 140, in savgol_coeffs
    coeffs, _, _, _ = lstsq(A, y)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\linalg\basic.py", line 822, in lstsq
    b1 = _asarray_validated(b, check_finite=check_finite)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\_lib\_util.py", line 187, in _asarray_validated
    a = toarray(a)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\numpy\lib\function_base.py", line 1033, in asarray_chkfinite
    "array must not contain infs or NaNs")

ValueError: array must not contain infs or NaNs
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
runfile('D:/data/scripts/DailyProfiles\u Gradients.py',wdir='D:/data/DFDP2/DFDP2B/DTS/DTS\u scripts')
文件“C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,第714行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,execfile中的第74行
exec(编译(脚本文本,文件名,'exec'),glob,loc)
文件“D:/data/scripts/DailyProfiles_Gradients.py”,第142行,in
梯度=梯度(y、x、比例、PO)
文件“D:/data/scripts/DailyProfiles_Gradients.py”,第76行,在Tgradient中
平滑=savgol_过滤器(列表(x),比例,PO,deriv=1,delta=dy[0])
文件“C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site packages\scipy\signal\u savitzky\u golay.py”,第337行,在savgol\u过滤器中
系数=savgol\u系数(窗口长度,多阶,deriv=deriv,delta=delta)
文件“C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site packages\scipy\signal\u savitzky\u golay.py”,第140行,savgol\u系数
系数,,,,=lstsq(A,y)
lstsq中的文件“C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site packages\scipy\linalg\basic.py”,第822行
b1=已验证的阵列(b,检查有限=检查有限)
文件“C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site packages\scipy\\u lib\\u util.py”,第187行,在asarray中
a=toarray(a)
文件“C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site packages\numpy\lib\function\u base.py”,第1033行,在asarray\u chkfinite中
“数组不能包含INF或NAN”)
ValueError:数组不能包含INF或NAN
这个问题相当具体的数据和方法,我还没有能够产生一个最低限度的重复工作的例子。我不是要求修改我的代码,我只是要求一些头脑风暴:我还没有检查哪些方面可能导致错误?除了窗口长度必须是大于多阶数的奇数之外,函数参数应该是什么样的


我很感谢出现的讨论,它最终帮助了我。

我可以重现错误
ValueError:array不能包含inf或nan
,如果
delta
非常小(例如
delta=1e-310
)。检查您的代码和数据,以确保您传递的
delta
值是合理的。

如果没有可复制的示例,我很抱歉,但是创建可复制的示例意味着我知道如何创建它,即知道错误的原因。在这种情况下,我不需要问这样的问题。除了“sscce”(或a),如果您在问题中包含完整的Python回溯(即完整的错误消息),它还将帮助我们帮助您。它包含有用的信息。谢谢!现在,通过添加
print
调用或使用调试器,找出
savgol\u filter()
的参数。也就是说,触发错误的
x
scale
PO
dy[0]
的值是什么?FWIW,我可以通过使
delta
小得离谱来触发相同的错误,例如
delta=1e-310
Traceback (most recent call last):

  File "<ipython-input-7-40b33049ef41>", line 1, in <module>
    runfile('D:/data/scripts/DailyProfiles_Gradients.py', wdir='D:/data/DFDP2/DFDP2B/DTS/DTS_scripts')

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile
    execfile(filename, namespace)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "D:/data/scripts/DailyProfiles_Gradients.py", line 142, in <module>
    grad = gradient(y, x, scale,PO)

  File "D:/data/scripts/DailyProfiles_Gradients.py", line 76, in Tgradient
    smoothed=savgol_filter(list(x), scale, PO, deriv=1, delta=dy[0])

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\signal\_savitzky_golay.py", line 337, in savgol_filter
    coeffs = savgol_coeffs(window_length, polyorder, deriv=deriv, delta=delta)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\signal\_savitzky_golay.py", line 140, in savgol_coeffs
    coeffs, _, _, _ = lstsq(A, y)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\linalg\basic.py", line 822, in lstsq
    b1 = _asarray_validated(b, check_finite=check_finite)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\_lib\_util.py", line 187, in _asarray_validated
    a = toarray(a)

  File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\numpy\lib\function_base.py", line 1033, in asarray_chkfinite
    "array must not contain infs or NaNs")

ValueError: array must not contain infs or NaNs