找出值及其位置的最大减少

时间:2014-01-23 03:37:11

标签: matlab

我必须找到这个月给出最大温度下降的日子。

    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,不应包括在内。感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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