首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建新变量,在Matlab中识别代码中的更改

创建新变量,在Matlab中识别代码中的更改
EN

Stack Overflow用户
提问于 2014-07-20 18:17:32
回答 1查看 80关注 0票数 0

我有一个double matrix B,在C1中有1998年,在C2中有一个代码(不重复)。每个C2都在C3中得到一个值。

代码语言:javascript
复制
%   C1      C2   C3
B=[ 1998    22   37 
1998    34    7
1998    76    12
1998    98    29
1998    107   14    
…]

我就是这样得到B

代码语言:javascript
复制
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**.**中的中的代码匹配。

代码语言:javascript
复制
A={Y  1996 1997 1998 1999  %R1
1   107 107 22  22  
13  98  98  76  1267 
… }

有什么方法可以让我获得一个新的变量来识别变量A中代码的变化,并在B中显示来自C3的相应值?例如:

代码语言:javascript
复制
AB={Y Initial C2 Change C2
1   107 14  22  37
13  98  29  76  12 }
EN

回答 1

Stack Overflow用户

发布于 2014-07-20 20:50:08

代码语言:javascript
复制
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

也许使用矢量化方法可以进一步改进这一点,但只要数组不太大,使用循环的速度就应该足够快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24853496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档