帮助!
如何在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
答案 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