为什么" numpy.mean"返回' inf'?

时间:2014-06-19 18:17:52

标签: python numpy

我需要计算超过1000行的数组的列的平均值。

np.mean(some_array)给了我 inf作为输出

但我很确定价值还可以。我正在将here中的csv加载到我的Data变量和列'水泥'健康"健康"从我的角度来看。

In[254]:np.mean(Data[:230]['Cement'])
Out[254]:275.75

但如果我增加行数 问题开始了:

In [259]:np.mean(Data[:237]['Cement'])
Out[259]:inf

但是当我查看数据时

In [261]:Data[230:237]['Cement']
Out[261]:
 array([[ 425. ],
        [ 333.  ],
        [ 250.25],
        [ 491.  ],
        [ 160.  ],
        [ 229.75],
        [ 338.  ]], dtype=float16)

我找不到这种行为的原因 P.S这发生在Python 3.x中使用wakari(基于云的Ipython)

Numpy Version' 1.8.1'

我正在加载数据:

No_Col=9
conv = lambda valstr: float(valstr.replace(',','.'))

c={}
for i in range(0,No_Col,1):
    c[i] = conv

Data=np.genfromtxt(get_data,dtype=float16 , delimiter='\t', skip_header=0, names=True,   converters=c)

1 个答案:

答案 0 :(得分:16)

我猜这个问题是精确的(正如其他人也评论过的那样)。直接从我们看到的mean()文档中引用

  

注释

     

算术平均值是沿轴分割的元素之和     按元素数量。

     

注意,对于浮点输入,平均值是使用   输入具有相同的精度。根据输入数据,这可以   导致结果不准确,尤其是float32(请参阅   例子如下)。使用指定更高精度的累加器   dtype关键字可以缓解此问题。

由于您的数组类型为float16,因此精度非常有限。使用dtype=np.float64可能会减轻溢出。另请参阅mean()文档中的示例。