2016-05-23 3 views
0

Учитывая эти два массива:Реализовать эту ситуацию в NumPy

E = [[16.461, 17.015, 14.676], 
[15.775, 18.188, 14.459], 
[14.489, 18.449, 14.756], 
[14.171, 19.699, 14.406], 
[14.933, 20.644, 13.839], 
[16.233, 20.352, 13.555], 
[16.984, 21.297, 12.994], 
[16.683, 19.056, 13.875], 
[17.918, 18.439, 13.718], 
[17.734, 17.239, 14.207]] 

S = [[0.213, 0.660, 1.287], 
[0.250, 2.016, 1.509], 
[0.016, 2.995, 0.619], 
[0.142, 4.189, 1.194], 
[0.451, 4.493, 2.459], 
[0.681, 3.485, 3.329], 
[0.990, 3.787, 4.592], 
[0.579, 2.170, 2.844], 
[0.747, 0.934, 3.454], 
[0.520, 0.074, 2.491]] 

Проблема утверждает, что я должен получить матрицу 3х3 ковариации (C) между S и E, используя следующую формулу:

C = (1/(n-1))[S'E - (1/10)S'i i'E] 

Здесь n равно 10, а i - вектор столбца nx 1, состоящий только из них. S 'и i' являются транспонированием матрицы S и вектора столбца i соответственно.

До сих пор я не могу получить C, потому что я не понимаю значение i (и i ') и его реализацию в формуле. Использование NumPy, до сих пор я:

import numpy as np 

tS = numpy.array(S).T 
C = (1.0/9.0)*(np.dot(tS, E)-((1.0/10.0)*np.dot(tS, E))) #Here is where I lack the i and i' implementation. 

Я очень ценю вашу помощь, чтобы понять и осуществить я и»в формуле. Вывод должен быть:

C= [[0.2782, 0.2139, -0.1601], 
    [-1.4028, 1.9619, -0.2744], 
    [1.0443, 0.9712, -0.6610]] 

ответ

2

Похоже, единственная часть вы отсутствующей делает i:

>>> i = np.ones((N, 1)) 
>>> i 
array([[ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.]]) 

После этого мы получаем

>>> C = (1.0/(N-1)) * (S.T.dot(E) - (1.0/N) * S.T.dot(i) * i.T.dot(E)) 
>>> C 
array([[ 0.27842301, 0.21388842, -0.16011839], 
     [-1.4017267 , 1.96193373, -0.27441417], 
     [ 1.04532836, 0.97120807, -0.66095656]]) 

Обратите внимание, что это Безразлично» t довольно создать массив, который вы ожидали, что более очевидно, если вы его обходите, но, возможно, в ваших данных есть некоторые незначительные опечатки?

>>> C.round(4) 
array([[ 0.2784, 0.2139, -0.1601], 
     [-1.4017, 1.9619, -0.2744], 
     [ 1.0453, 0.9712, -0.661 ]]) 
+0

Эй! Благодарю. знак равно –

1

Это то, что вы хотите, я думаю:

S = numpy.array(S) 

E = numpy.array(E) 

ones = np.ones((10,1)) 

C = (1.0/9)*(np.dot(S.T, E)-((1.0/10)* (np.dot(np.dot(np.dot(S.T,ones),ones.T),E)))) 

Мой вывод:

array([[ 0.27842301, 0.21388842, -0.16011839], 
    [-1.4017267 , 1.96193373, -0.27441417], 
    [ 1.04532836, 0.97120807, -0.66095656]]) 
Смежные вопросы