gpt4 book ai didi

python - python 中的数学错误计算 log(det(AA^T)+1)

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:57 27 4
gpt4 key购买 nike

我正在尝试用 Python 估计 l​​og(det(AAT)+1) 的平均值。我的简单代码工作正常,直到我得到 17×17 矩阵,此时它给了我一个数学错误。这是代码:

iter = 10000
for n in xrange(1,20):
h = n
dets = []
for _ in xrange(iter):
A = (np.random.randint(2, size=(h,n)))*2-1
detA_Atranspose = np.linalg.det(np.dot(A, A.transpose()))
try:
logdetA_Atranspose = math.log(detA_Atranspose+1,2)
except ValueError:
print "Ooops!", n,detA_Atranspose
dets.append(logdetA_Atranspose)
print np.mean(dets)

A 应该是一个元素为 -1 或 1 的矩阵。

我做错了什么,如何解决? 17 有什么特别之处?

最佳答案

对于标题中的公式(以前是 logdet(AA^T) ):

det(AA^T) 对于一些随机 As 可以简单地为 0。该函数将失败,因为计算 log(0) 无效。

请注意,理论上 det(AA^T) 不能为负,因为 AA^T 是 positive semi-definite matrix (这意味着所有特征值都是非负的,并且意味着 det >= 0)。

对于代码中的公式(logdet(1+AA^T))

您可能应该使用 numpy.linalg.slogdet() 并计算 slogdet(1+A.dot(A.T))

来自其documentation :

“计算数组行列式的符号和(自然)对数。

如果一个数组有一个非常小或非常大的行列式,那么对 det 的调用可能会溢出或下溢。这个例程对于此类问题更加稳健,因为它计算行列式的对数而不是而不是行列式本身。”

关于python - python 中的数学错误计算 log(det(AA^T)+1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com