如何用python得到方阵的伪行列式

问题描述 投票:0回答:3

我有一个矩阵未通过奇异测试,在该测试中我正在计算朴素贝叶斯分类器。我正在处理方程的

ln(det(sigma))
部分。

if np.linalg.cond(covarianceMatrix) < 1/sys.float_info.epsilon:
    return np.log(np.linalg.det(covarianceMatrix))
else:
    return a pseudo determinant

当协方差矩阵是奇异的时,我必须找到伪行列式。我怎样才能做到这一点?

python numpy matrix naivebayes
3个回答
4
投票
  1. 首先计算矩阵的特征值

    eig_values = np.linalg.eig(covarianceMatrix)

  1. 然后计算非零特征值的乘积(这等于矩阵的伪行列式值),

    pseudo_determinent = np.product(eig_values[eig_values > 1e-12])


1
投票

你可以使用numpy的pinv来计算伪逆,然后用它来计算行列式吗? http://www.sosmath.com/matrix/inverse/inverse.html


0
投票

第一个答案会给出错误(元组和浮点数之间不支持>符号),因为np.linalg.eig

函数给出元组中的特征值和特征向量。选择元组的第一个元素来获取特征值,然后计算伪行列式。

eig_values = np.linalg.eig(covarianceMatrix)[0] pseudo_determinent = np.product(eig_values[eig_values > 1e-12])
    
© www.soinside.com 2019 - 2024. All rights reserved.