0

我有一个950000x1值数组,例如[1e15 2.5e12 ...etc]. 但是当我执行以下操作以获得平均值时,我得到的值为NaN.

avg=mean(g1)

我无法理解为什么会收到此错误。

4

2 回答 2

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

试试any(isnan(Vec))你的阵列。如果它返回 a 1,那么您将知道它包含一个NaN. 如果是这样,那么以下代码将删除 NaN。

Vec(isnan(Vec)) = [];

如果您认为这已经解决了您的问题,请随时单击我的答案旁边的勾号。干杯!

于 2012-11-11T04:28:48.843 回答
1

NaN而不是在查询mean函数之前删除s ,您可以只使用nanmean,它在计算平均值时会忽略NaN值:

南意思

y = nanmean(X) 是 X 的平均值,在移除 NaN 值后计算得出。

NaN它也适用于矩阵,如果你删除s就不起作用。

于 2012-11-11T19:59:55.120 回答