与 np.cov 比较时,计算具有定义函数的复数数组的协方差矩阵不匹配
Computing covariance matrix of complex array with defined function is not matching while comparing with np.cov
我正在尝试在 Python 中编写一个简单的协方差矩阵函数。
import numpy as np
def manual_covariance(x):
mean = x.mean(axis=1)
print(x.shape[1])
cov = np.zeros((len(x), len(x)), dtype='complex64')
for i in range(len(mean)):
for k in range(len(mean)):
s = 0
for j in range(len(x[1])): # 5 Col
s += np.dot((x[i][j] - mean[i]), (x[k][j] - mean[i]))
cov[i, k] = s / ((x.shape[1]) - 1)
return cov
使用这个函数,如果我计算协方差:
A = np.array([[1, 2], [1, 5]])
man_cov = manual_covariance(A)
num_cov = np.cov(A)
我的回答和np.cov()匹配,没有问题。但是,当我改用复数时,我的答案与 np.cov()
不匹配
A = np.array([[1+1j, 1+2j], [1+4j, 5+5j]])
man_cov = manual_covariance(A)
num_cov = cov(A)
Manual result:
[[-0.5+0.j -0.5+2.j]
[-0.5+2.j 7.5+4.j]]
Numpy cov result:
[[0.5+0.j 0.5+2.j]
[0.5-2.j 8.5+0.j]]
我已经尝试打印每条语句,以检查可能出错的地方,但我找不到错误。
因为两个复向量z1
和z2
的点积定义为z1 · z2*
,其中*表示共轭。如果你使用 s += np.dot((x[i,j] - mean[i]), np.conj(x[k,j] - mean[i]))
你应该得到正确的结果,我们使用 Numpy's conjugate function.
我正在尝试在 Python 中编写一个简单的协方差矩阵函数。
import numpy as np
def manual_covariance(x):
mean = x.mean(axis=1)
print(x.shape[1])
cov = np.zeros((len(x), len(x)), dtype='complex64')
for i in range(len(mean)):
for k in range(len(mean)):
s = 0
for j in range(len(x[1])): # 5 Col
s += np.dot((x[i][j] - mean[i]), (x[k][j] - mean[i]))
cov[i, k] = s / ((x.shape[1]) - 1)
return cov
使用这个函数,如果我计算协方差:
A = np.array([[1, 2], [1, 5]])
man_cov = manual_covariance(A)
num_cov = np.cov(A)
我的回答和np.cov()匹配,没有问题。但是,当我改用复数时,我的答案与 np.cov()
不匹配A = np.array([[1+1j, 1+2j], [1+4j, 5+5j]])
man_cov = manual_covariance(A)
num_cov = cov(A)
Manual result:
[[-0.5+0.j -0.5+2.j]
[-0.5+2.j 7.5+4.j]]
Numpy cov result:
[[0.5+0.j 0.5+2.j]
[0.5-2.j 8.5+0.j]]
我已经尝试打印每条语句,以检查可能出错的地方,但我找不到错误。
因为两个复向量z1
和z2
的点积定义为z1 · z2*
,其中*表示共轭。如果你使用 s += np.dot((x[i,j] - mean[i]), np.conj(x[k,j] - mean[i]))
你应该得到正确的结果,我们使用 Numpy's conjugate function.