Arrays 从30年每日数据的巨大矩阵中选择最大值
假设我在一个矩阵中有30年的每日数据。简单地说,假设它只有一列,10957行表示30年的天数。这一年始于2010年。我想找到每年的最大值,这样输出将是1列30行。在Matlab中有没有自动编程的方法?目前,我正在手动操作,我所做的是:Arrays 从30年每日数据的巨大矩阵中选择最大值,arrays,matlab,matrix,Arrays,Matlab,Matrix,假设我在一个矩阵中有30年的每日数据。简单地说,假设它只有一列,10957行表示30年的天数。这一年始于2010年。我想找到每年的最大值,这样输出将是1列30行。在Matlab中有没有自动编程的方法?目前,我正在手动操作,我所做的是: %for the first year max(RAINFALL(1:365); . . %for the 30th of year max(RAINFALL(10593:10957); 手工操作很累人,而且我几乎没有相同的数据集。我使用下面的代码来计算
%for the first year
max(RAINFALL(1:365);
.
.
%for the 30th of year
max(RAINFALL(10593:10957);
手工操作很累人,而且我几乎没有相同的数据集。我使用下面的代码来计算30年的平均值和标准偏差。我试图修改代码来完成上面的任务,但没有成功。希望任何人都可以修改代码或建议新的方式给我
data = rand(32872,100); % replace with your data matrix
[nDays,nData] = size(data);
% let MATLAB construct the vector of dates and worry about things like leap
% year.
dayFirst = datenum(2010,1,1);
dayStamp = dayFirst:(dayFirst + nDays - 1);
dayVec = datevec(dayStamp);
year = dayVec(:,1);
uniqueYear = unique(year);
K = length(uniqueYear);
a = nan(1,K);
b = nan(1,K);
for k = 1:K
% use logical indexing to pick out the year
currentYear = year == uniqueYear(k);
a(k) = mean2(data(currentYear,:));
b(k) = std2(data(currentYear,:));
end
一种可能的办法:
@mean
或@std
更改@max
,猜猜您得到了什么。。。比您的代码简单得多。这可能会帮助您:
RAINFALL = rand(1,10957); % - Your data here
firstYear = 2010;
numberOfYears = 4;
cum = 0; % - cumulative factor
yearlyData = zeros(1,numberOfYears); % - this isnt really necessary
for i = 1 : numberOfYears
yearLength = datenum(firstYear+i,1,1) - datenum(firstYear + i - 1,1,1);
yearlyData(i) = max(RAINFALL(1 + cum : yearLength + cum));
cum = cum + yearLength;
end
我认为你唯一需要添加的是
c=nan(1,K)代码>和c(k)=max(max(当前年份的数据:)代码>在循环内部。我还记得这是rayryeng的代码。从2010年开始30年的数据?我错了。那是克雷金的。很抱歉,如果你看到这个,@craigim@LuisMendo yes从2010年1月1日开始所以。。。您有未来所有这些年的每日降雨量数据吗?:-)
RAINFALL = rand(1,10957); % - Your data here
firstYear = 2010;
numberOfYears = 4;
cum = 0; % - cumulative factor
yearlyData = zeros(1,numberOfYears); % - this isnt really necessary
for i = 1 : numberOfYears
yearLength = datenum(firstYear+i,1,1) - datenum(firstYear + i - 1,1,1);
yearlyData(i) = max(RAINFALL(1 + cum : yearLength + cum));
cum = cum + yearLength;
end