使用 Matlab,我正在尝试构建一个结构,该结构将存储按年份组织的矩阵 X 的分组行。向量 yrsStr 每年都有需要分组的依据。有关我要分组的值,请参阅矩阵 X:
yrsStr = [734139 734504 734869 735235];
% 734139 is Jan 1 2010
% 734504 is Jan 1 2011
% 734869 is Jan 1 2012
% 735235 is Jan 1 2013
X = [734500 0 1 2 3;
734502 4 5 6 7;
734504 8 9 10 11; % Jan 1 2011
734505 12 13 14 15;
734868 16 17 18 19;
734869 20 21 22 23; % Jan 1 2012
734872 24 25 26 27;
735234 28 29 30 31;
735235 32 33 34 35; % Jan 1 2013
735236 36 37 38 39;
735250 40 41 42 43];
例如,如果日期小于 2011 年 1 月 1 日,则日期小于 734504(2011 年 1 月 1 日)的每一行将存储在一个矩阵中,然后该矩阵将存储在 struct(1).data 中。Struct(1).year 将只是 2010 年 1 月 1 日。对于所有日期 >= 734594(2011 年 1 月 1 日)和 < 734869(2012 年 1 月 1 日),每一行将存储在一个矩阵中,然后将存储在 struct (2).数据。Struct(2).year 将只是 2011 年 1 月 1 日。其余行也将如此。yrsStr 和 X 中的所有值都会不断变化(包括更多甚至更少的年份),因此我正在尝试编写尽可能动态的代码。我开始编写以下代码,但我遇到了障碍,真的不知道如何完成或继续。下面的代码还没有做太多,但它只反映了我的头脑风暴。
tDay = datevec(date)
numYrs = 3;
%Compute date vectors for previous years for comparison
for i=1:1:numYrs+1
if i == 1
yrs(:,:,i) = [tDay(1,1) tDay(1,2)-tDay(1,2)+1 tDay(1,3)-tDay(1,3)+1 0 0 0];
else
yrs(:,:,i) = [yrs(1,1,1)-i+1 1 1 0 0 0];
end
end
%Convert date from vector form to serial
jj = size(yrs(1,1,:));
for j=1:1:jj(3)
yrsStr(1,j) = datenum(yrs(:,:,j))
end
yrsStr = fliplr(yrsStr); %ascending serial numbers
% ###########I DO NOT KNOW WHAT TO DO BELOW HERE###############
kk = 1; %initialize yrsStr counting
m = 1; %initialize Y
for k=1:1:size(X,1)
if X(k,1) < yrsStr(kk)
Y(m) = X(k,:);
m = m + 1;
elseif X(k) < yrsStr(kk)
testStruct(kk).year = yrsStr(kk);
testStruct(kk).
如果有人对我如何进行有任何建议,请告知。谢谢你。