【发布时间】:2012-10-30 23:34:54
【问题描述】:
我有一个 950000x1 值数组,例如 [1e15 2.5e12 ...etc]。但是当我执行以下操作以获得平均值时,我得到的值为NaN。
avg=mean(g1)
我无法理解为什么会出现此错误。
【问题讨论】:
我有一个 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))。如果它返回一个1,那么你就会知道它包含一个NaN。如果是这样,那么以下代码将删除 NaN。
Vec(isnan(Vec)) = [];
如果您认为这已经解决了您的问题,请随时单击我的答案旁边的勾号。干杯!
【讨论】:
mean 函数(使用 f10 和 f11 键)并查看 NaN 出现的位置,然后在您的问题中发布结果?您可以通过在调用 mean 之前在代码中设置断点来启动调试模式。
在查询mean 函数之前不要删除NaNs,您可以只使用nanmean,它在计算平均值时会忽略NaN 值:
y = nanmean(X) 是 X 的平均值,在去除 NaN 值后计算得出。
它也适用于矩阵,如果你删除NaNs,它就不起作用了。
【讨论】: