是什么原因导致“在输入DLASCLS参数编号4时具有非法值”错误,我该如何解决?

问题描述

我使用脚本一个一个地处理许多大的.csv文件。 但是,从昨天开始,尽管我没有更改python脚本中的任何内容,但是我得到了一个既无法解释也无法解决错误

我有一个简化的脚本版本。 当我不尝试绘制数据,移除savgol过滤器或减少数据点数量时,它将运行。 在下面提供的as版本中,它将在第二个循环中停止,并显示以下错误

**进入DLASCLS时,参数编号4具有非法值
**在输入DLASCLS时,参数编号4具有非法值
追溯(最近一次通话):

中的文件“ simplified_problem.py”,第29行 ysmooth = savgol_filter(y,51,5)
文件“ C:\ Programs \ Python \ python37 \ lib \ site-packages \ scipy \ signal_savitzky_golay.py”,
savgol_filter中的第337行
coeffs = savgol_coeffs(窗口长度,多阶,导数=导数,delta = delta)
文件“ C:\ Programs \ Python \ python37 \ lib \ site-packages \ scipy \ signal_savitzky_golay.py”, savgol_coeffs中的139行
coeffs,_,_,_ = lstsq(A,y)
文件“ C:\ Programs \ Python \ python37 \ lib \ site-packages \ scipy \ linalg \ basic.py”,第1218行, 在lstsq
提高LinAlgError(“ SVD未在线性最小二乘中收敛”)
numpy.linalg.LinAlgError:SVD未在线性最小二乘中收敛

我怀疑该错误与脚本本身无关,因为该错误仅在之后出现 一个主要的窗口更新(当前版本为10.0.19041)。

有人知道导致问题的原因是什么以及如何解决吗? 请让我知道是否需要其他信息。 非常感谢您的帮助。

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import savgol_filter
import pandas as pd
from pathlib import Path
    
def curve(x,E,A,xmin):
    '''Function describing a curve
    
    x   -- independent variable
    E   -- trap energy. expected values between 0-1 eV
    A   -- pre-exponential factor. positive for peaks with positive current
           and negative for peaks with negative current
    xmin -- position of the peak extremum. value in Kelvin
    k   -- Boltzmannfactor in eV/K
    '''
    k = 8.617333262145E-5 #eV/K
    return  A*np.exp(-(E/(k*x))-((np.exp((E/(k*xmin)))*(E/(k*xmin))**(9/2))/((E/(k*xmin))+3.5))*np.exp(-(E/(k*x)))*(E/(k*x))**(-7/2))


for i in range(3):
    print(i)
    x = np.arange(50,1051)
    noise = np.random.normal(0,1,len(x))*3e-10
    y = curve(x,0.35,-1e-4,500)+noise
    
    #smooth data
    ysmooth = savgol_filter(y,51,5)

    #create (sub)plots
    fig = plt.figure(constrained_layout=True,figsize=(8,4))
    gs = fig.add_gridspec(2,4)
    ax11 = fig.add_subplot(gs[0:2,0:2])
    ax11.plot(x,y)
    ax11.plot(x,ysmooth)
    plt.show()

解决方法

您可以找到问题here的答案。您与Windows Update有关,最终与OpenBlas有关,numpy使用OpenBlas执行线性代数计算。遗憾的是,“解决方案”并不十分令人满意:您必须等待Microsoft在下一个Windows升级程序中修复它(希望如此!),或者通过conda安装numpy,后者使用Intel MKL作为后端而不是OpenBlas。