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

Matlab 找出值及其位置的最大减少量,matlab,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

我必须找出这个月气温下降幅度最大的天数

    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]
在这种情况下,当温度从75降至48时,答案是[18 19]


我把NaN变成了零。然后得到整个月的垂直数组。然后使用diff()函数获得差异。但是,我不知道下一步该怎么做。此外,由于NaN=0,因此在最后它给出了一个差值-78,这不应包括在内。提前感谢您的帮助。

我不是matlab专家,但我想提出我的解决方法: 你在一个数组中复制你的温度。如果可以检查值是否为NaN,则不必将NaN更改为零值。这很重要,因为零是一个有效的温度,如果你把这个值改为零,你就不能决定这个值是NaN还是零

现在遍历数组并比较当前索引i和i+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

你想在两天之间找到max drop吗?还是仅仅连续几天?这样的话,85到43的落差必须是最大值。我不明白什么是
[18 19]
。这些是日数?据我所见,它们对应的是温度81和83,而不是75和48。你能澄清一下吗?是的,这是一个月中的几天。是75和48。如果你看第四行第三列和第四列,你会发现它。第一排有一天。那是第一次约会。第三排在第15天结束。第四行第三列第18天。如果不将
NaN
更改为零,会发生什么?它工作得很好!:)谢谢这是我使用MATLAB的第三周。你能给我解释一下下面这行发生了什么事吗?“noOfNaNs=find(~isnan(transposeTemps2(:)),1,'first')-1”@user3226108基本上您可以使用
isnan
在输入向量/矩阵中标记NaN。将其反转,使非NaN由
1
表示,而不是
0
,然后查找
1
首次出现的索引。感谢您的回复。作为一个新用户,你无法理解它的工作原理!