numpy nanmean 中的错误

Posted

技术标签:

【中文标题】numpy nanmean 中的错误【英文标题】:Error in numpy nanmean 【发布时间】:2016-09-30 00:18:34 【问题描述】:

我有一个带有浮点数和 NaN 的数组,但是当我在数组上调用 numpy.nanmean() 时,我得到 NaN 作为结果。这怎么可能?

这是数组ages的样本

[22.0 38.0 26.0 35.0 35.0 nan 54.0 2.0 27.0 14.0 4.0 58.0 20.0 39.0 14.0
 55.0 2.0 nan 31.0 nan 35.0 34.0 15.0 28.0 8.0 38.0 nan 19.0 nan nan 40.0
 nan nan 66.0 28.0 42.0 nan 21.0 18.0 14.0 40.0 27.0 nan 3.0 19.0 nan nan
 nan nan 18.0 7.0 21.0 49.0 29.0 65.0 nan 21.0 28.5 5.0 11.0 22.0 38.0 45.0
...

形状

(891,)

np.nanmean(ages) 返回nan

【问题讨论】:

因为都是NaNs? 不,这就是重点 您是沿轴还是跨所有元素调用numpy.nanmean() 维度是(891,) 我尝试了axis=0 并且没有指定它,但我得到了相同的结果 嗯,这很奇怪。 【参考方案1】:

正如我们在上面的 cmets 中发现的那样,在一维列表中具有 numpy.ndarray 的 dtype 是很奇怪的,因为它看起来只有浮点数和 NaNs。这让我认为您正在以有缺陷的方式生成数据,例如从文件内容手动创建数组而不删除空行等。

要解决此问题,请将您的数组转换(或查看)为不同的 dtype。试试

np.nanmean(ages.astype('float64'))

如果可行,您应该永久更改其 dtype

ages = ages.astype('float64')

并重新审视您的数组生成,因为我 99% 确定那里有问题。

【讨论】:

如何以有缺陷的方式生成数据?我有这个问题,astype 技巧不起作用... 如何将数据加载到 numpy 数组中?如果它以某种方式是表格的,您可以尝试使用pandas(例如x= pd.read_table(...))加载它,检查结果系列或数据框,然后使用x.values 转换为numpy 数组,因为pandas 具有更强大的文件加载比numpy 更多的格式。【参考方案2】:

我刚刚遇到了同样的错误。就我而言,我在数组中有一些 inf-inf 值,它们是有效的浮点数,但显然会导致任何 mean() 函数中断。

过滤掉为我解决的无限值。

【讨论】:

以上是关于numpy nanmean 中的错误的主要内容,如果未能解决你的问题,请参考以下文章

numpy中处理含nan数据的统计函数及其效率

Nans 的两个矩阵的平均值,每个元素的元素

关于MATLAB中的mean函数

关于matlab中nan读取的问题

matlab 中关于fread函数的用法

Matlab矩阵乘法忽略nans?