Mam tablicę wartości X:

 x=numpy.array([[-0.11361818  -0.113618185  -0.98787775  -0.09719566],
 [-0.11361818  -0.04173076 -0.98787775  -0.09719566],
 [-0.11361818  -0.04173076 -0.98787775  -0.09719566],
 [-0.62610493  -0.71682393 -0.24673653  -0.18242028],
 [-0.62584854  -0.71613061 -0.24904998  -0.18287883],
 [-0.62538661  -0.71551038 -0.25160676  -0.18338629]])

I tablicę odpowiednich klas etykiety Y:

y=numpy.array([1, 1, 2, 3, 4, 4])

Etykieta pierwszej klasy 1 w Y należy do pierwszego wiersza w tablicy X, druga klasa etykiety 1 w Y należy do drugiego rzędu w tablicy X i tak dalej.

Teraz chcę obliczyć średnie wartości dla każdej klasy 1-4. Na przykład, wiersz 1 i 2 w x należą do klasy 1, więc obliczę średnią rzędu 1 i 2.

Mam następujący kod:

means = numpy.array([x[y == i].mean(axis=0) for i in xrange(4)])

Kiedy to robię, trafię do tego wyniku:

array([[        nan],
       [-1.27636606],
       [-1.24042235],
       [-1.77208567]])

Jeśli weźmieję Xrange (6), mam ten wynik:

array([[        nan],
       [-1.27636606],
       [-1.24042235],
       [-1.77208567],
       [-1.774899  ],
       [        nan]])

Dlaczego tak jest i jak pozbyć się nans i skończyć z moimi 4 średnich wartościami?

Mam kod z Oto, gdzie podjęli liczbę zajęć jak Argument na Xrange () i nie widzę tego, co robiłem inaczej.

Z góry dziękuje za twoją pomoc!

0
Kaly 27 listopad 2013, 22:41

2 odpowiedzi

Najlepsza odpowiedź

xrange(4) wyniki w wartościach [0, 1, 2, 3]. Twoja pierwsza wartość w means oznacza nan, ponieważ nie masz wartości y równa zero.

Zamiast tego zrobić:

In [49]: means = numpy.array([x[y == i].mean(axis=0) for i in xrange(1, 5)])

In [50]: means
Out[50]: 
array([[-1.27636606],
       [-1.24042235],
       [-1.77208567],
       [-1.774899  ]])
4
bogatron 27 listopad 2013, 18:47

Należy użyć xrange(1,5), aby uniknąć wartości 0.

0
lennon310 27 listopad 2013, 18:55