You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NumPy时协方差矩阵无法求逆?出现奇异矩阵报错

协方差矩阵求逆报错“Singular matrix”的原因及解决方法

问题背景

给定数据:

  • x = [255, 239, 213]
  • y = [255, 240, 245]

执行以下代码时出现报错:

import numpy as np
cov_matrix = np.cov(np.array([[255.0, 255.0], [239.0, 240.0], [213.0, 245.0]]))
inv_matrix = np.linalg.inv(cov_matrix)

报错信息:

LinAlgError: Singular matrix

原因分析

奇异矩阵指的是不可逆的矩阵,核心原因是矩阵的秩小于其自身的维度。你的情况问题出在np.cov的输入维度规则:

  • np.cov默认以每行代表一个变量,每列代表一个样本来计算协方差。你传入的是3行2列的数组,相当于定义了3个变量,但每个变量只有2个样本。
  • 当变量数量(3)超过样本数量(2)时,协方差矩阵的秩最大只能等于样本数(2),但矩阵是3x3的,必然是奇异矩阵,无法求逆。

解决方法

将数据转置,让每个变量(x、y)作为一行,样本作为列,形成2行3列的数组:

import numpy as np
# 正确构造数据:x和y各为一行,3个样本为列
data = np.array([[255, 239, 213], [255, 240, 245]])
cov_matrix = np.cov(data)
inv_matrix = np.linalg.inv(cov_matrix)

此时得到的协方差矩阵是2x2的,秩为2,满足可逆条件,可正常求逆。

你也可以用np.linalg.matrix_rank(cov_matrix)查看矩阵的秩,验证原3x3矩阵的秩为2,确实不可逆。


内容的提问来源于stack exchange,提问作者Giuseppe Boezio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:28:19