1. 程式人生 > >N個向量間的兩兩皮爾遜係數的矩陣計算方法

N個向量間的兩兩皮爾遜係數的矩陣計算方法

目的:有N個行向量 [ e 1 ,

e 2 , . . .
.
e n ] 需要計算兩兩之間的皮爾遜係數,最簡單的辦法就是兩個for迴圈,分別計算就搞定了。但是,如果n的值不大這樣還ok,一旦n的值很大一般在10W左右,再迴圈效率損失就不小了,在做科學計算的時候,能用矩陣運算的就儘量別用迴圈太耗時!
PS:程式碼裡連矩陣運算都沒有還怎麼愉快的裝X啊,哈哈
======================我是隻想安安靜靜寫程式碼的分割線===================
兩個向量的皮爾遜係數計算公式:
這裡寫圖片描述

有個更簡單的計算公式:
ρ x , y = i = 1 n ( x x ¯ ) ( y y ¯ ) i = 1 n ( x x ¯ ) 2 i = 1 n ( y y ¯ ) 2
根據公式寫出對應的程式碼:

 # 計算兩序列的皮爾遜係數,數值越大相關性越大
 def get_distance(self, vector1, vector2):
     num1 = vector1 - np.average(vector1)
     num2 = vector2 - np.average(vector2)
     num = np.sum(num1 * num2)
     den = np.sqrt(np.sum(np.power(num1,2)) * np.sum(np.power(num2,2)))
     if den == 0:
         return 0.0
     return np.abs(num/den)

現在來利用矩陣重寫上述公式:
e e ¯ = e ~ = [ e 1 e 1 ¯ e 2 e 2 ¯ . . . . . e n e n ¯ ]

e ~ = [ e 1 ~ e 2 ~ . . . e n ~ ]
則有:
e ~ e ~ = [ e 1 ~ 2 , e 1 ~ e 2 ~ , . . , e 1 ~