Tecnicamente, questo non è un problema di programmazione ma un problema di matematica. Ma penso che sia meglio usare la matrice varianza-covarianza. O matrice di correlazione, se la scala dei valori sono molto diversi, per esempio, invece di avere:
>>> x
array([[5, 3, 0],
[3, 0, 5],
[5, 5, 0],
[1, 1, 7]])
Hai:
>>> x
array([[5, 300, 0],
[3, 0, 5],
[5, 500, 0],
[1, 100, 7]])
Per ottenere una matrice varianza-COV:
>>> np.cov(x)
array([[ 6.33333333, -3.16666667, 6.66666667, -8. ],
[ -3.16666667, 6.33333333, -5.83333333, 7. ],
[ 6.66666667, -5.83333333, 8.33333333, -10. ],
[ -8. , 7. , -10. , 12. ]])
O la matrice di correlazione:
>>> np.corrcoef(x)
array([[ 1. , -0.5 , 0.91766294, -0.91766294],
[-0.5 , 1. , -0.80295507, 0.80295507],
[ 0.91766294, -0.80295507, 1. , -1. ],
[-0.91766294, 0.80295507, -1. , 1. ]])
Questo è il modo di guardarlo, la cella diagonale, cioè, (0,0)
cella, è la correlazione del tuo 1 ° vettore in X a sé stesso, quindi è 1. Le altre celle, cioè, (0,1)
cella, è la correlazione tra il 1 ° e il 2 ° vettore in X. Sono correlati negativamente. O allo stesso modo, la prima e la terza cellula sono positivamente correlate.
matrice di covarianza o matrice di correlazione evitare il problema zero indicato da @Akavall.
Penso che l'approccio alla covarianza sia migliore della mia soluzione. – Akavall