ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

由Python Numpy计算的协方差矩阵每次都会改变

2019-08-25 12:56:06  阅读:186  来源: 互联网

标签:python numpy covariance


我有一个1043 * 261矩阵,0到1之间的数字非常小,我用numpy.cov()函数计算了1043 * 1043协方差矩阵.我尝试运行代码几次并得到相似(不完全相同)的协方差矩阵,但协方差矩阵中的元素与e-7的比例略有不同.这有时会使协方差矩阵成为非PSD,这对我来说会造成严重的问题.

有谁知道为什么存在差异以及如何解决它?

通过两次运行相同的代码我得到了两个协方差矩阵.如果按元素比较它们,您会看到细微差别:

No. 1
[[  5.05639177e-06   2.44041401e-06   3.30187175e-06 ...,   1.66634014e-06
4.03972183e-06   1.18433575e-06]
[  2.44041401e-06   9.67277658e-06   9.04356309e-06 ...,   2.50668884e-06
5.43371939e-06   4.74297546e-06]
[  3.30187175e-06   9.04356309e-06   2.09334309e-05 ...,   3.13977728e-06
8.69946165e-06   6.15981652e-06]
..., 
[  1.66634014e-06   2.50668884e-06   3.13977728e-06 ...,   4.20175297e-06
4.16076781e-06   1.59827406e-06]
[  4.03972183e-06   5.43371939e-06   8.69946165e-06 ...,   4.16076781e-06
2.58010941e-05   3.02797946e-06]
[  1.18433575e-06   4.74297546e-06   6.15981652e-06 ...,   1.59827406e-06
3.02797946e-06   6.60805238e-06]]

No.2
[[  5.05997030e-06   2.42187179e-06   3.30788097e-06 ...,   1.66495376e-06
4.03676937e-06   1.17413702e-06]
[  2.42187179e-06   9.60677140e-06   9.05219266e-06 ...,   2.50338648e-06
5.42679569e-06   4.75547515e-06]
[  3.30788097e-06   9.05219266e-06   2.04172017e-05 ...,   3.13058624e-06
8.67976701e-06   6.28137859e-06]
..., 
[  1.66495376e-06   2.50338648e-06   3.13058624e-06 ...,   4.20175297e-06
4.16076781e-06   1.59827884e-06]
[  4.03676937e-06   5.42679569e-06   8.67976701e-06 ...,   4.16076781e-06
2.58010941e-05   3.02810307e-06]
[  1.17413702e-06   4.75547515e-06   6.28137859e-06 ...,   1.59827884e-06
3.02810307e-06   6.63834973e-06]]

非常感谢你!

解决方法:

numpy.cov似乎是确定性的:

import numpy

randoms = numpy.random.random((1043, 261))

covs = [numpy.cov(randoms) for _ in range(10)]
all((c==covs[0]).all() for c in covs)
#>>> True

我想这个问题在别的地方.

另请注意,此结果的大小为数字的第1000位

标签:python,numpy,covariance
来源: https://codeday.me/bug/20190825/1719285.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有