使用pybreakpoints的bai-perron代码触发numpy.linalg.LinAlgError异常
解决pybreakpoints中bai-perron代码的奇异矩阵错误
问题场景
使用pybreakpoints仓库的bai-perron断点检测代码(Python 3.12.2),调用自带的nile.csv测试数据,编写的代码与仓库测试示例类似,但运行时抛出numpy.linalg.LinAlgError: Matrix is singular to machine precision错误。
原代码:
from pybreakpoints.baiperron import breakpoint import numpy as np import pandas as pd nile = pd.read_csv("tests/data/nile.csv") X = np.ones_like(nile) results = breakpoint(X, nile)
问题原因
核心是数据格式不匹配:
pd.read_csv读取的nile是DataFrame对象,包含多列(比如索引列和数值列)np.ones_like(nile)生成了与DataFrame行列数一致的二维数组,导致输入X的维度不符合函数要求,在递归残差计算时出现奇异矩阵。
修复代码
提取DataFrame中的数值列作为一维数组输入,同时构造正确维度的常数项矩阵:
from pybreakpoints.baiperron import breakpoint import numpy as np import pandas as pd # 读取测试数据并提取数值列 nile = pd.read_csv("tests/data/nile.csv") y = nile['value'].values # 匹配仓库测试数据的列名 X = np.ones((len(y), 1)) # 构造n×1的常数项设计矩阵 results = breakpoint(X, y)
新手调试建议
- 打印数据形状确认维度:
print(nile.shape, X.shape, y.shape),确保输入维度与仓库测试用例一致 - 参考仓库内的测试代码(如
tests/test_baiperron.py),对比输入格式的差异
内容的提问来源于stack exchange,提问作者Anurat Chapanond
相关产品推荐
相关产品推荐

