Python numpy数组的平均值返回Nan
我有一个Python numpy数组的平均值返回Nan,python,numpy,tensorflow,matplotlib,math,Python,Numpy,Tensorflow,Matplotlib,Math,我有一个np.array,我想计算它的平均值。当我运行代码时,这部分代码返回Nan: data-=np.mean(数据,dtype=np.float64) 问题是什么?您的阵列中很可能有nan 您可以选择不属于NaN的所有其他元素,如: my_array = my_array[~np.isnan(my_array)] 因为数字和NaN之间的任何操作都会返回NaN,因此如果数据数组至少包含一个NaN,则np.mean操作将返回NaN。您可以使用np.nanmean函数计算平均值(检查): 编辑
np.array
,我想计算它的平均值。当我运行代码时,这部分代码返回Nan:
data-=np.mean(数据,dtype=np.float64)
问题是什么?您的阵列中很可能有
nan
您可以选择不属于NaN
的所有其他元素,如:
my_array = my_array[~np.isnan(my_array)]
因为数字和NaN之间的任何操作都会返回NaN,因此如果
数据
数组至少包含一个NaN,则np.mean
操作将返回NaN。您可以使用np.nanmean
函数计算平均值(检查):
编辑:对于同时包含NaN和Inf值的数组
如果数组还包含Inf值,则需要计算平均值,而不考虑这两个值
>>将numpy作为np导入
>>>x=np.array([np.nan,np.inf,1])
>>>np.平均值(x)
楠
>>>np.nanmean(x)
inf
>>>np.nanmean(x[x~=np.isinf(x)])
1
或者,您可以使用np.nan\u to_num
将数组转换为值,在这里您可以决定哪些值可以替换nan、+Inf和-Inf值,这样以后每个常规函数都可以工作。例如,在您的情况下,如果您想在平均值中同时丢弃Inf和NaN,您可以将每个“坏”值转换为NaN,并在结果数组上应用np.nanmean
:
>>将numpy作为np导入
>>>x=np.array([np.nan,np.inf,1])
>>>y=np.nan\u to_num(x,nan=np.nan,posinf=np.nan)
>>>y
数组([nan,nan,1.]))
>>>y_平均值=np.nanmean(y)
>>>你是说
1
我猜数组中可能有N,或者数组是空的。@dmuir:我检查了数组,它的一些值你是楠。我该怎么办?您能添加一些示例数据吗?np.nan\u to_num(x)
可用于替换nan值。@我添加了此代码并更改了值但是这次在执行代码(data-=np.mean(data))之后,np.mean返回无穷大。有什么问题吗?我这样做了,但它返回了无穷大。问题出在哪里?数组也可能包含无限值。在这种情况下,您肯定希望忽略它们。我编辑了我的答案。我检查了我的数据,它没有无穷大的值,但在执行代码后,它返回无穷大。我能做些什么呢?您能共享您的数据(或数据的子集)吗?np.min
和np.max
返回什么?当你绘制它时,你看到了什么?
data -= np.nanmean(data, dtype=np.float64)