Python Numpy関数covで共分散を計算する方法を見つけようとしています。2つの1次元配列を渡すと、2x2の結果のマトリックスが返されます。私は統計が得意ではありませんが、そのような状況での共分散は単一の数字であると信じています。 This は私が探しているものです。
def cov(a, b):
if len(a) != len(b):
return
a_mean = np.mean(a)
b_mean = np.mean(b)
sum = 0
for i in range(0, len(a)):
sum += ((a[i] - a_mean) * (b[i] - b_mean))
return sum/(len(a)-1)
それは機能しますが、使用方法がわかれば、Numpyバージョンの方がはるかに効率的だと思います。
誰も私が書いたようなNumpy cov関数を実行させる方法を知っていますか?
おかげで、
デイブ
a
とb
が1次元シーケンスの場合、numpy.cov(a,b)[0][1]
はcov(a,b)
と同等です。
np.cov(a,b)
によって返される2x2配列の要素は
cov(a,a) cov(a,b)
cov(a,b) cov(b,b)
(ここでも、cov
は上で定義した関数です。)
説明してくれたunutbuに感謝します。デフォルトでは、numpy.covはサンプルの共分散を計算します。母集団の共分散を取得するには、次のように合計N個のサンプルで正規化を指定できます。
Covariance = numpy.cov(a, b, bias=True)[0][1]
print(Covariance)
またはこのように:
Covariance = numpy.cov(a, b, ddof=0)[0][1]
print(Covariance)