Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从30年每日数据的巨大矩阵中选择最大值_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays 从30年每日数据的巨大矩阵中选择最大值

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); 手工操作很累人,而且我几乎没有相同的数据集。我使用下面的代码来计算

假设我在一个矩阵中有30年的每日数据。简单地说,假设它只有一列,10957行表示30年的天数。这一年始于2010年。我想找到每年的最大值,这样输出将是1列30行。在Matlab中有没有自动编程的方法?目前,我正在手动操作,我所做的是:

%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 
一种可能的办法:

  • 创建一列,包含每个数据值的年份,使用和来处理闰年

  • 查找每年的最大值,并使用

  • 代码:

    作为奖励:如果您在步骤2中通过
    @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