我有950000x1
个值数组,例如[1e15 2.5e12 ...etc]
。但当我执行以下操作以获得平均值时,我得到的值为NaN
。
avg=mean(g1)
我无法理解为什么会收到此错误。
答案 0 :(得分:2)
以下代码在我的机器上运行正常(Core i7,16GB RAM,Linux Mint v12,Matlab 2012b):
T = 1e9;
Vec = ones(T, 1) * 1e200;
M = mean(Vec);
这告诉我,您的值数组在某处包含NaN
。请注意,即使您的数组包含的数字大于双浮点数也可以处理(即大约为1e320或其左右),mean
函数将返回Inf
,而不是NaN
。< / p>
在您的阵列上尝试any(isnan(Vec))
。如果它返回1
,那么您知道它包含NaN
。如果是,则以下代码将删除NaN。
Vec(isnan(Vec)) = [];
如果您认为这已经解决了您的查询,请随时点击我的答案旁边的刻度线。干杯!
答案 1 :(得分:1)
在查询NaN
函数之前,您可以使用mean
代替nanmean
,而不是在计算平均值时忽略NaN
值:
y = nanmean(X)是X的平均值,在去除NaN值后计算。
它也适用于矩阵,如果删除NaN
,它就不起作用。