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

Hia*_*tus 10 python numpy

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

np.mean(some_array)给我 inf输出

但我很确定价值还可以.我从这里加载一个csv 到我的Data变量,从我的观点来看,'cement'列是"健康的".

In[254]:np.mean(Data[:230]['Cement'])
Out[254]:275.75
Run Code Online (Sandbox Code Playgroud)

但如果我增加问题的行数:

In [259]:np.mean(Data[:237]['Cement'])
Out[259]:inf
Run Code Online (Sandbox Code Playgroud)

但是当我看数据时

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

我没有找到这种行为的原因PS这种情况发生在Python 3.x中使用wakari(基于云的Ipython)

Numpy版本'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)
Run Code Online (Sandbox Code Playgroud)

Cra*_*opi 19

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

笔记

算术平均值是沿轴的元素之和除以元素的数量.

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

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