Numpy:平均值计算结果为nan值



我有一个值数组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  ]])

最新更新