如何在不溢出的情况下计算大矩阵的行列式?
How do calculate a determinant of an large matrix without getting an overflow?
早上好!
我有一个 nxn 矩阵,其中 n 大到足以让我溢出。
我试图用数学方法解决这个问题,它适用于小 n,但现在我从指数中溢出。
为了更好地解释这里的代码:
# create a quadratic Matrix matrix with shape 500x500
matrix = [[ 1.03796037 -0.00898546 -0.00410423 ... -0.0453022 0.02608995
-0.01146299]
...
[-0.01146299 -0.04572196 0.07370042 ... 0.03203931 0.07298667
0.98693473]]
# calculate the mean of matrix
mean = matrix.mean()
# calculate n
n = matrix.shape[0]
# divide the mean from the matrix and calculate the determinant
determinant = np.linalg.det(matrix/mean)
# use now det(c*M) = c^n*det(M)
solution = mean**n*determinant
>>>> inf
这个方法可以防止 np.linalg.det()
函数溢出,但是 mean**n
的幂计算会溢出,我不知道如何解决这个问题。意思是 btw 一个 float 和 n 一个 int
你能帮忙吗?请仅在 Python 或 numpy.
您可以通过调用“numpy.linalg.slogdet
”而不是“numpy.linalg.det
”来解决它。正如已经指出的 here
slogdet can be used whenever the det has led to overflowing/underflowing.
希望有用。
早上好!
我有一个 nxn 矩阵,其中 n 大到足以让我溢出。
我试图用数学方法解决这个问题,它适用于小 n,但现在我从指数中溢出。
为了更好地解释这里的代码:
# create a quadratic Matrix matrix with shape 500x500
matrix = [[ 1.03796037 -0.00898546 -0.00410423 ... -0.0453022 0.02608995
-0.01146299]
...
[-0.01146299 -0.04572196 0.07370042 ... 0.03203931 0.07298667
0.98693473]]
# calculate the mean of matrix
mean = matrix.mean()
# calculate n
n = matrix.shape[0]
# divide the mean from the matrix and calculate the determinant
determinant = np.linalg.det(matrix/mean)
# use now det(c*M) = c^n*det(M)
solution = mean**n*determinant
>>>> inf
这个方法可以防止 np.linalg.det()
函数溢出,但是 mean**n
的幂计算会溢出,我不知道如何解决这个问题。意思是 btw 一个 float 和 n 一个 int
你能帮忙吗?请仅在 Python 或 numpy.
您可以通过调用“numpy.linalg.slogdet
”而不是“numpy.linalg.det
”来解决它。正如已经指出的 here
slogdet can be used whenever the det has led to overflowing/underflowing.
希望有用。