【问题标题】:Find the greatest decrease in the values and their position找到值的最大减少及其位置
【发布时间】:2014-01-23 13:06:05
【问题描述】:

我必须找出在给定月份内出现最大温度下降的天数。

    temps2 =  [NaN   NaN   NaN   NaN   NaN   NaN    85;
82    75    76    81    73    71    74;
76    74    73    81    83    82    75;
72    74    75    48    43    56    69;
73    75    81    83    77    73    74;
78   NaN   NaN   NaN   NaN   NaN   NaN]

在这种情况下,答案是 [18 19],当温度从 75 下降到 48 时

我将 NaN 更改为零。然后得到整个月的垂直数组。然后使用 diff() 函数来获取差异。但是,我不知道下一步应该是什么。此外,由于 NaN=0,最后它给出了一个差异 -78,不应该包括在内。感谢您提前提供任何帮助。

【问题讨论】:

  • 您想找出任何一天之间的最大跌幅吗?还是只有连续几天?这样一来,85 到 43 下降必须是最大的。
  • 我不明白[18 19] 是什么。这些是天数?据我所知,它们对应于温度 81 和 83,而不是 75 和 48。你能澄清一下吗?
  • 是的,它们是一个月中的日子。它是 75 和 48。如果您查看第 4 行第 3 和第 4 列,您会发现它。第一排有一天。那是日期 1。第 3 行在第 15 天结束。第 4 行第 3 列第 18 天。
  • 如果不将NaN 更改为零会怎样?

标签: matlab


【解决方案1】:

看看这个:

temps2 =  [NaN   NaN   NaN   NaN   NaN   NaN    85;
82    75    76    81    73    71    74;
76    74    73    81    83    82    75;
72    74    75    48    43    56    69;
73    75    81    83    77    73    74;
78   NaN   NaN   NaN   NaN   NaN   NaN];

% transpose to have days row wise from left to right 
% for diff function
transposeTemps2 = temps2';

% difference in consequtive days
d = diff(transposeTemps2(:));

% find minimum value of the differences
[c, ind] = min(d);

% find number of NaN at the begining of the month
% to calculate day number where is the largest difference
noOfNaNs = find(~isnan(transposeTemps2(:)), 1,'first') - 1;


% number of the first day
firstDayFound = ind - noOfNaNs;
secondDayFound = firstDayFound + 1;

[firstDayFound secondDayFound]

ans =

    18    19

【讨论】:

  • 效果很好! :) 谢谢!这是我使用 MATLAB 的第三周。你能解释一下下面这行发生了什么吗? "noOfNaNs = find(~isnan(transposeTemps2(:)), 1,'first') - 1"
  • @user3226108 基本上你使用isnan 在输入向量/矩阵中标记NaN。您将其反转,以便用1 而不是0 表示非NaN,然后​​查找1 第一次出现的索引。
【解决方案2】:

我不是 matlab 专家,但我想提出我的想法如何解决这个问题: 您将温度复制到数组中。如果您可以检查该值是否为 NaN,则不必将 NaN 更改为零值。这非常重要,因为零是有效温度,如果将值更改为零,则无法确定该值是 NaN 还是零。

现在您遍历数组并比较当前索引 i 和 i + 1。您保存位置和温度差的值。在进一步的迭代中,您必须检查新差异是否高于旧差异。

【讨论】:

  • 感谢您的回复。作为一个新用户无法弄清楚它的工作原理!
猜你喜欢
  • 2021-12-11
  • 2023-03-26
  • 2012-05-13
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2016-01-18
相关资源
最近更新 更多