我有一组值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]])
为什么会出现这种情况?如何摆脱nans并最终得到我的4个均值?
我有来自here的代码,他们把类的数量作为xrange()的参数,我不太清楚我做了什么不同的事情。
提前感谢您的帮助!
答案 0 :(得分:4)
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 ]])
答案 1 :(得分:0)
您应该使用xrange(1,5)
来避免值0。