matlab: remove duplicate values

后端 未结 3 675
慢半拍i
慢半拍i 2021-01-19 07:52

I\'m fairly new to programming in general and MATLAB and I\'m having some problems with removing values from matrix.

I have matrix tmp2 with values:

         


        
3条回答
  •  耶瑟儿~
    2021-01-19 08:42

    You can do this using unique:

    >> [~,b] = unique(tmp2(:,1)); % indices to unique values in first column of tmp2
    >> tmp2(b,:)                  % values at these rows
    ans =
        0.6000   20.4000
        0.7000   20.4000
        0.8000   20.4000
        0.9000   20.4000
        1.0000   19.1000
        ...
    

    By default, unique saves the last unique value it finds, and the output will be sorted. This happens to be what you want/have, so you're in luck :)

    If this is not what you want/have, you'll have to tinker a bit more. Removing duplicates preserving the order goes like this:

    % mess up the order
    A = randperm(size(tmp2,1));
    tmp2 = tmp2(A,:)
    
    % use third output of unique
    [a,b,c] = unique(tmp2(:,1));
    
    % unique values, order preserved
    tmp2(b(c),:)
    
    ans =
        1.1000   19.1000
        1.2000   19.1000
        1.0000   20.4000
        0.7000   20.4000
        1.0000   20.4000
        1.4000   19.1000
        0.6000   20.4000
        0.9000   20.4000
        1.3000   19.1000
        0.8000   20.4000
        ...
    

    which still preserves the last entry found. If you want to keep the first entry found, use

    % unique values, order preserved, keep first occurrence
    [a,b,c] = unique(tmp2(:,1), 'first');
    

提交回复
热议问题