【问题标题】:Numpy: mean calculation results in nan valuesNumpy:平均计算结果为 nan 值
【发布时间】:2013-11-28 02:55:03
【问题描述】:

我有一个值数组 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() 的参数,我不太明白我做了什么不同的事情。

提前感谢您的帮助!

【问题讨论】:

    标签: python arrays numpy nan


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多