我正在计算一个数据集的协方差,并试图将我的代码与numpy进行比较。
我有100个模拟。还有256个值,所以我的起始数组的形状是(100,256)
测试np。cov函数工作,我试着给它两个相同的数组,即np.cov(a,a)。
我期望cov(a,b)返回) (x (a, x (a, b)(浸(b, a),浸(b, b)
所以我认为对于相同的矩阵我应该得到浸(一)x (,)浸(一)x (a, a)
但情况似乎并非如此。
Pow_i = Pk_dd_pow
Pow_j = Pk_dd_pow
numpy_cov= np.cov(np.array(np.real(Pk_pow_i)).T, np.array(np.real(Pk_pow_j)).T)
给出numpy_cov作为(512,512)数组,正如我所期望的那样。但. .
left_upper = numpy_cov[0:256,0:256]
right_upper= numpy_cov[256:513,0:256]
right_lower = numpy_cov[256:513,256:513]
left_lower = numpy_cov[0:256,256:513]
print(np.array_equal(right_lower, left_upper))
print(np.array_equal(left_lower, right_upper))
print(np.array_equal(right_lower, right_upper))
print(np.array_equal(left_lower, left_upper))
print(np.array_equal(left_lower, right_lower))
返回True
True
False
False
False
我认为这四个都应该给出自协方差,那么为什么它们不同呢?请帮助!:)
不清楚它是否会产生此结果,但您可以做的是尝试较小大小的数组下面是一个更基本的例子:
import numpy as np
a = np.array([[1,2,3,4,5],[1,2,3,4,5]])
b = np.array([[10,20,30,40,50],[10,20,30,40,50]])
numpy_cov_aa = np.cov(a,a)
numpy_cov_ab = np.cov(a, b)
numpy_cov_ba = np.cov(b, a)
numpy_cov_bb = np.cov(b, b)
print(numpy_cov_aa)
print('---')
print(numpy_cov_ab)
print('---')
print(numpy_cov_ba)
print('---')
print(numpy_cov_bb)
返回:
[[2.5 2.5 2.5 2.5]
[2.5 2.5 2.5 2.5]
[2.5 2.5 2.5 2.5]
[2.5 2.5 2.5 2.5]]
---
[[ 2.5 2.5 25. 25. ]
[ 2.5 2.5 25. 25. ]
[ 25. 25. 250. 250. ]
[ 25. 25. 250. 250. ]]
---
[[250. 250. 25. 25. ]
[250. 250. 25. 25. ]
[ 25. 25. 2.5 2.5]
[ 25. 25. 2.5 2.5]]
---
[[250. 250. 250. 250.]
[250. 250. 250. 250.]
[250. 250. 250. 250.]
[250. 250. 250. 250.]]
这样做的好处是更容易被你观察到。
从这里你可以检查它是否延伸到你所期望的…