错误信息还算简单,解包成太多的值,意思就是说你要赋值的变量多了,你的 values 少了
结论
你要赋值的变量多了,你的 values 少了,这是根本原因,就比如 a, b, c, d = 20, 5, 5
就会报错
我的出错代码
import pywt
import xlrd
import numpy as np
def excel2matrix(path): # 把xlsx文件的数据变成np.array数组
data = xlrd.open_workbook(path)
table = data.sheets()[0]
nrows = table.nrows # 行数
ncols = table.ncols # 列数
datamatrix = np.zeros((nrows, ncols))
for i in range(nrows):
rows = table.row_values(i)
datamatrix[i,:] = rows
return datamatrix
pathX = '11.xlsx' # 数据路径
x = excel2matrix(pathX)
a = np.mean(x)
print(a)
w = 'sym4' # 小波基类型
l = 3 # 小波变换层次
coeffs = pywt.wavedec2(x,w,l)
[cl, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)] = coeffs
这个代码报错
ValueError: too many values to unpack (expected 4)
原因
调用 pywt.wavedec2 时参数错误,其大概形式如下
pywt.wavedec2(data, wavelet, mode=’symmetric’, level=None, axes=(-2, -1))
data: 输入的数据
wavelet: 小波基
level: 尺度(要变换多少层)
return: 返回的值要注意,每一层的高频都是包含在一个tuple中,例如三层的话返回为 [cl, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)]
为什么会错呢,因为我直接使用了参数位置匹配,但是中间有一个 mode=’symmetric’
我没有指定,自然错了所以换成 coeffs = pywt.wavedec2(data=x, wavelet=w, level=l)
按名称绑定参数,就没错了