我有一个950000x1
值数组,例如[1e15 2.5e12 ...etc]
. 但是当我执行以下操作以获得平均值时,我得到的值为NaN
.
avg=mean(g1)
我无法理解为什么会收到此错误。
以下代码在我的机器上运行良好(Core i7、16GB RAM、Linux Mint v12、Matlab 2012b):
T = 1e9;
Vec = ones(T, 1) * 1e200;
M = mean(Vec);
这向我表明您的值数组包含某个NaN
地方。请注意,即使您的数组包含的数字大于双浮点可以处理的数字(即大约 1e320 或大约),那么该mean
函数将返回Inf
,而不是NaN
。
试试any(isnan(Vec))
你的阵列。如果它返回 a 1
,那么您将知道它包含一个NaN
. 如果是这样,那么以下代码将删除 NaN。
Vec(isnan(Vec)) = [];
如果您认为这已经解决了您的问题,请随时单击我的答案旁边的勾号。干杯!
NaN
而不是在查询mean
函数之前删除s ,您可以只使用nanmean
,它在计算平均值时会忽略NaN
值:
南意思:
y = nanmean(X) 是 X 的平均值,在移除 NaN 值后计算得出。
NaN
它也适用于矩阵,如果你删除s就不起作用。