2013-11-27 57 views
0

我具有值x的數組:numpy的:在南平均值計算的結果值

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]]) 

和相應類的數組標籤Y:

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

在y中的第一個類的標籤1屬於對於數組x中的第一行,y中的第二個類標籤1屬於數組x中的第二行,依此類推。

現在我想計算每個1-4級的平均值。例如,在X列1和2兩者都屬於1類,所以計算行1的平均值和2

我有以下代碼:

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

當我爲此我最終這個結果:

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

如果我拿的xrange(6),我有這樣的結果:

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

爲什麼是這樣的話,我如何得到RI關閉nans並最終獲得我的4個平均值?

我有here的代碼,他們把類的數量作爲xrange()的參數,我不完全明白我做了什麼不同。

在此先感謝您的幫助!

回答

4

​​結果值[0, 1, 2, 3]。您在means中的第一個值是nan,因爲您沒有y值等於零。

相反,這樣做:

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 ]]) 
0

您應該使用xrange(1,5)避免值0