调用np.linalg.lstsq触发ufunc lstsq_n无匹配循环报错解决方案咨询
报错根因
你遇到的No loop matching the specified signature and casting was found for ufunc lstsq_n报错确实是输入数据类型混合导致的:B_matrix_lenk中每行的最后一个元素是numpy.matrix二维对象,不是普通浮点数值,导致整个数组的数据类型为object,而np.linalg.lstsq仅支持纯数值类型的输入,无法处理object类型数组。
排查思路
- 验证输入数组数据类型:执行
print(np.transpose(B_matrix_lenk).dtype),如果输出为object即可确认类型异常 - 定位异常元素:执行
for row in B_matrix_lenk: print([type(elem) for elem in row]),可直观看到哪些元素为非float的numpy.matrix类型
修复方案
- 先清洗
B_matrix_lenk,提取所有嵌套matrix中的数值,转换为纯浮点类型的numpy数组:
import numpy as np B_matrix_lenk_clean = np.array([ [elem.item() if isinstance(elem, np.matrix) else elem for elem in row] for row in B_matrix_lenk ], dtype=np.float64)
- 用清洗后的数组执行最小二乘计算,建议显式指定
rcond参数避免版本兼容警告:
V_RAP, resid, rank, s = np.linalg.lstsq(np.transpose(B_matrix_lenk_clean), D, rcond=None)
补充说明:
numpy.matrix属于已经被废弃的过时接口,日常数值计算优先使用普通numpy.ndarray,可避免这类嵌套类型导致的异常。
内容的提问来源于stack exchange,提问作者pypy
相关产品推荐
相关产品推荐

