gpt4 book ai didi

python - 如何在 Python 中就地进行 Cholesky 分解

转载 作者:太空狗 更新时间:2023-10-30 02:21:44 30 4
gpt4 key购买 nike

我正在尝试进行就地 Cholesky 分解,但该功能实际上并未在 scipy 中实现,或者有一些我不理解的地方。我在这里发帖以防是后者。这是我正在做的一个简化示例:

import numpy
import scipy.linalg

numpy.random.seed(0)
X = numpy.random.normal(size=(10,4))
V = numpy.dot(X.transpose(),X)
R = V.copy()
scipy.linalg.cholesky(R,False,overwrite_a=True)
print V
print R

我认为应该发生的事情是用上三角矩阵覆盖 R。但是,当我运行这段代码时,我的 V 和 R 完全相同(cholesky 没有覆盖 R)。我是误解了 overwrite_a 的目的,还是犯了其他错误?如果这只是 scipy 中的一个错误,是否有解决方法或其他方法可以在 Python 中进行就地 Cholesky 分解?

最佳答案

再试一次

>>> scipy.__version__
'0.11.0'
>>> np.__version__
'1.6.2'

它完美地工作:

X = np.random.normal(size=(10,4))
V = np.dot(X.transpose(),X)
print V
R = V.copy()
print R
C = scipy.linalg.cholesky(R,False,overwrite_a=True)
print V
print R

输出是:

[[ 11.22274635   5.10611692   0.70263037   3.14603088] # V before
[ 5.10611692 8.94518939 -3.17865941 1.64689675]
[ 0.70263037 -3.17865941 7.35385131 -2.23948391]
[ 3.14603088 1.64689675 -2.23948391 8.25112653]]
[[ 11.22274635 5.10611692 0.70263037 3.14603088] # R before
[ 5.10611692 8.94518939 -3.17865941 1.64689675]
[ 0.70263037 -3.17865941 7.35385131 -2.23948391]
[ 3.14603088 1.64689675 -2.23948391 8.25112653]]
[[ 11.22274635 5.10611692 0.70263037 3.14603088] # V after
[ 5.10611692 8.94518939 -3.17865941 1.64689675]
[ 0.70263037 -3.17865941 7.35385131 -2.23948391]
[ 3.14603088 1.64689675 -2.23948391 8.25112653]]
[[ 3.35003677 1.52419728 0.20973811 0.93910339] # R after
[ 0. 2.57332704 -1.35946252 0.08375069]
[ 0. 0. 2.33703292 -0.99382158]
[ 0. 0. 0. 2.52478036]]

关于python - 如何在 Python 中就地进行 Cholesky 分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408873/

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