我有一个值数组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]])
以及一组相应的类标签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]])
为什么会出现这种情况?我如何摆脱奶奶,最终只得到我的4个平均值?
我有这里的代码,他们把类的数量作为xrange()的参数,我看不出我做了什么不同。
提前感谢您的帮助!
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 ]])