python - numpy.linalg.det() 可以计算错误吗?同一矩阵的两个不同结果
问题描述
我发现了一个非常有趣的情况。谁能告诉我为什么会这样?
对于一个矩阵,我运行了两段不同的代码来计算它的协方差矩阵。2个结果看起来一样。但它们的决定因素之间存在巨大差距。这是代码:
X = np.array([[11,5,3,34,8],[25,9,2,6,345],[96,13,8823,8,4],[92,15,153,9,12],[7,14,345,31,10]])
Xbar, mu, std = normalize(X)
S = (1/Xbar.shape[0]) * np.dot(Xbar.T, Xbar)
print('DIY covariance matrix:\n', S)
print('determinant:\n', np.linalg.det(S))
print('\n')
SbyNp = np.cov(Xbar, rowvar=False, bias=True)
print('numpy.linalg covariance matrix:\n', SbyNp)
print('determinant:\n', np.linalg.det(SbyNp))
np.testing.assert_almost_equal(S, SbyNp)
np.testing.assert_almost_equal(np.linalg.det(S), np.linalg.det(SbyNp))
运行结果:
DIY covariance matrix:
[[ 1. 0.57159341 0.62932008 -0.7149413 -0.27222462]
[ 0.57159341 1. 0.26958072 -0.39024794 -0.29147673]
[ 0.62932008 0.26958072 1. -0.38189298 -0.28405386]
[-0.7149413 -0.39024794 -0.38189298 1. -0.4706952 ]
[-0.27222462 -0.29147673 -0.28405386 -0.4706952 1. ]]
determinant:
-1.4290811771081465e-16
numpy.linalg covariance matrix:
[[ 1. 0.57159341 0.62932008 -0.7149413 -0.27222462]
[ 0.57159341 1. 0.26958072 -0.39024794 -0.29147673]
[ 0.62932008 0.26958072 1. -0.38189298 -0.28405386]
[-0.7149413 -0.39024794 -0.38189298 1. -0.4706952 ]
[-0.27222462 -0.29147673 -0.28405386 -0.4706952 1. ]]
determinant:
5.716324708432541e-17
为什么这些决定因素不同?numpy.linalg.det() 中是否有任何错误?
解决方案
推荐阅读
- python - Apache 气流中的 OAuth 身份验证(Google Cloud Composer)
- android - 错误:runtime_flags 中设置的未知位:0x8000
- r - 尽管 macOS Catalina 中 step = 1,但 Shiny numericInput 的增量为 2
- amazon-web-services - 如何减少从 S3 显示图像的加载时间
- python - udp客户端python获取时间
- image - 不允许使用无 IPTC 的图片格式
- python - 如何使用 scipy 在 python 中绘制 fft 并修改频率范围,使其显示中心的两个峰值频率?
- c# - 从文件路径中的文件名中获取第一个字符
- google-cloud-build - 是否可以使用 Google CloudBuild 将图像推送到 AWS ECR?
- python - 层sequential_109的输入0与层不兼容:预期ndim=3,发现ndim=2。收到的完整形状:(1, 60)