我有double matrix B
{1998} C1
和C2
代码(不重复)。每个C2
都会在C3
中获得一个值。
% C1 C2 C3
B=[ 1998 22 37
1998 34 7
1998 76 12
1998 98 29
1998 107 14
…]
这就是我B
的方式:
N1=[N{:,1} N{:,2} N{:,3}];
N1=unique(N1(:,1:3),'rows');
N3= unique(N1(:,1:2),'rows');
for m=1:size(N3,1)
N3(m,3)=sum(N1(:,1) == N3(m,1) & N1(:,2)==N3(m,2));
end
B=N3((N3(:,1) == 1998),:);
我有一个cell-array A
,其中年份在R1
中水平分布,Y
中的未重复值,以及后面的列中的相应代码。 代码与变量C2
中B
的代码相匹配。
A={Y 1996 1997 1998 1999 %R1
1 107 107 22 22
13 98 98 76 1267
… }
我是否有办法获得一个新变量来识别变量A
中代码的变化,并在C3
中显示B
中的相应值?例如:
AB={Y Initial C2 Change C2
1 107 14 22 37
13 98 29 76 12 }
答案 0 :(得分:0)
AB = {'Y' 'Initial' 'C2' 'Change' 'C2'}; % initialize result cell array
for i=2:size(A,1) % loop through rows of A
indicesOfChanges = find(diff([A{i,2:end}])); % find changes in row
for j=1:length(indicesOfChanges) % for all changes look up the corresponding values
ind1=find(B(:,2)==A{i,indicesOfChanges(j)+1}); % row index in B of value before change
ind2=find(B(:,2)==A{i,indicesOfChanges(j)+2}); % row index in B of value after change
AB{end+1,1} = A{i,1};
AB{end,2} = B(ind1,2);
AB{end,3} = B(ind1,3);
AB{end,4} = B(ind2,2);
AB{end,5} = B(ind2,3);
end
end
使用矢量化方法可能会进一步改善这种情况,但只要您的数组不是太大,它就应该使用循环足够快。