如果行具有相似的值,则Matlab会添加行

时间:2017-08-01 14:15:25

标签: matlab matrix

我是matlab的新手,我无法理解我的matlab代码中的错误。

首先,如果其他值相同,我想添加行值

例如输入x,

x=[ 1 1; 
    1 2;
    2 1;
    3 1;
    3 1 ] 

我希望能够将我的功能恢复为

z=[1 3;
   2 1;
   3 2]

我的代码:

x=[1 1;1 3;1 0;3 1;3 5;4 7;4 5];
z=[];
i=1;
a=0;
k=1;
sum=x(1,2);
[sizex,n]=size(x);
%fprintf('m-k --->%d\n',sizex-k);
while i<=(sizex-k)

    if(x(i,1)== x(i+k,1))


        sum=x(i+k,2)+sum;
        k=k+1;

    elseif (x(i,1)~= x(i+k,1))

        z(1+a,1)=x(i,1);
        z(1+a,2)=sum;
        sum=x(i+k,2);
        i=i+k;
        k=1;
        a=a+1;
    end

end
如果我能得到答案,我会非常熟悉。 Thanx提前

1 个答案:

答案 0 :(得分:1)

这可以通过使用unique从第一列获取唯一标识符列表,然后使用accumarray为每个唯一标识符添加第二列中的总计来实现:

x = [1 1; 1 2; 2 1; 3 1; 3 1];
[vals, ~, index] = unique(x(:, 1), 'stable');
z = [vals accumarray(index, x(:, 2))];

z =
     1     3
     2     1
     3     2