我必须找到这个月给出最大温度下降的日子。
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,不应包括在内。感谢您提前提供任何帮助。
答案 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.您可以保存临时差异的位置和值。在进一步迭代时,您必须检查新差异是否高于旧差异。