Matlab如何在2个不同的向量中找到相互的数字并替换它们?

时间:2014-06-05 10:21:28

标签: matlab

帮助!

如何在2个不同的向量中找到相互的数字并替换它们?

我遇到这种情况:

2016    2059    43
2362    2450    88
2451    2474    25
2475    2684    36
3301    3332    31

当列1与第二列的差异为1或0时,我希望得到开始和结束,列号3必须添加值,如下例所示。对不起我的坏解释伙伴们。

这是我想要的输出

2016    2059    43
2362    2684    149
3301    3332    31

3 个答案:

答案 0 :(得分:1)

这个答案与你的问题一样清楚: - )

x = [ 2016    2059    43
      2362    2450    88
      2450    2474    25
      2474    2684    36
      3301    3332    31 ];

[~, ii] = ismember(x(:,2),x(:,1));
jj = ~ii;
kk = sum(jj)+1+flipud(cumsum(flipud(-jj)));
ll = true(size(x,1),1);
ll(nonzeros(ii)) = false;
result = [ x(ll,1)  x(jj,2) accumarray(kk,x(:,3)) ];

这给出了:

result =
        2016        2059          43
        2362        2684         149
        3301        3332          31

答案 1 :(得分:1)

假设你的三个向量是A,B,C:

[com,ia,ib]=intersect(A,B);
A1=setdiff(A,com);
B1=setdiff(B,com);
C1=C;

for k=fliplr(1:length(ib))
      C1(ib(k)+1)=C1(ib(k))+C1(ib(k)+1);
      C1(ib(k))=[];
end

A1,B1,C1是结果向量

答案 2 :(得分:0)

这是一个带循环的解决方案。只需检查column 2中的每个值,如果它也出现在column 1中。如果是这样的话,我在column 3中添加值,并替换OP中示例中给出的值。
最后2行删除所有现在的0值(已被替换的值)并重新整形{{1因为另一个命令将A作为1-dim-vector返回原始形式。

A