【问题标题】:Finding the average value in matlabmatlab求平均值
【发布时间】:2012-10-30 23:34:54
【问题描述】:

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

avg=mean(g1)

我无法理解为什么会出现此错误。

【问题讨论】:

    标签: matlab matrix average


    【解决方案1】:

    以下代码在我的机器上运行良好(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)) = [];
    

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

    【讨论】:

    • @RohanChakrabarty 很有趣。好的,下一步,您可以尝试在调试模式下运行您的代码。具体来说,尝试逐行遍历mean 函数(使用 f10 和 f11 键)并查看 NaN 出现的位置,然后在您的问题中发布结果?您可以通过在调用 mean 之前在代码中设置断点来启动调试模式。
    • 是的,它返回一个 Nan,你能指导我如何删除这些值,即将它们更改为 0
    • @RohanChakrabarty 我将编辑我的答案以包含有关如何删除 NaN 的代码。
    • 我还有一个疑问,我正在绘制 x,y 和密度之间的地图。 x 和 y 是距离。除了散点图还有什么方法可以绘制它。我希望在颜色栏中显示密度
    • @RohanChakrabarty 这是一个完全不相关的问题。在标准站点搜索或 Google 搜索中不会出现的 cmets 中回答它有什么意义?请记住,这是每个人的资源,而不仅仅是人们回答您问题的地方。此外,如果您写了一个所有论坛成员都可以看到的问题,那么您可能会得到更好的答案。我建议你把它写成一个全新的问题,并包含一些代码来说明你尝试了什么以及为什么它不起作用。
    【解决方案2】:

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

    nanmean:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 2011-02-03
      相关资源
      最近更新 更多