我试图获取数据集中每年的最大值。数据在一列中,按每日时间步长排列。 如何从前 365 行中获取最大值,然后从接下来的 365 行中获取最大值? 我在想这样的事情:
years=31;
for i=1:years
peak(i)=max(data(i:365*i,2))
end
但当 i=2 时,范围应为 366:730 等。 数据矩阵是 11322x7 double ,我需要第 2 列。
最佳答案
我考虑过提出类似 @Thilo 的答案的建议,但这没有考虑闰年(这似乎出现在您的数据中,因为 365*31=11315,小于 11322)
您也许能够建立一个复杂的矢量化解决方案,但我很想手动跟踪开始和停止索引:
NYEARS = 31;
start = 1;
stop = 365 + isLeapYear(year(1));
n=1;
maxValues = nan(NYEARS,1);
while(n=<NYEARS)
maxValues(n) = max(data(start:stop,2));
n=n+1;
start = stop + 1;
stop = start + 365 + isLeapYear(year(n));
end
它可能不是很快,但我怀疑这也将成为瓶颈。
function leap_p = isLeapYear(year)
leap_p = ~mod(year,400) || (~mod(year,4) && mod(year,100))
end
关于matlab - 索引移动极差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468262/