找到多次出现的元素并删除matlab

时间:2014-07-02 17:53:47

标签: matlab

我在解决这个问题时遇到了麻烦,我向你寻求帮助..

假设我有一个向量

vector1 = [ 1 1 2];

带有关联的错误向量(vector1的第一个元素与error1的第一个元素相关联)

error1= [0.08 0.9 0.3];

如果vector1包含2个相等的元素(在这种情况下是第一个和第二个元素)我应该用NaN替换具有最高错误的元素

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

我假设以下事项:

  1. vector1可以有两个以上相等的元素。
  2. error1可以包含负值。
  3. 这可能不是最快的解决方案,但据我所说,它可行。

    % Generating random inputs
    vector1=[1 2 2 1 1 1 3 3 4 4 5 5 6];
    error=3*randn(1,13);
    
    % Sorting the vector
    [vector2,I]=sort(vector1);
    error2=error(I);
    
    % finding unique elements and the range of repeated elements is stored in b2
    [~,b,~]=unique(vector2)
    b2=[b [b(2:end)-1;length(vector2)]]
    b2((b2(:,1)-b2(:,2))==0,:)=[]
    
    % Calculating maximum error for those repeated indices.
    for i=1:size(b2,1)
       [~,ind]=max(error2(b2(i,1):b2(i,2)));
       maxErrorInd(i,1)=ind+b2(i,1)-1;
    end
    
    % Replacing with NaN
    vector2(maxErrorInd)=NaN
    
    % Mapping back since we had sorted
    vector3(I)=vector2
    error3(I)=error2
    

答案 1 :(得分:1)

看看这是否适合你 -

presence_vec_ele = double(bsxfun(@eq,vector1,unique(vector1)'))
presence_vec_ele(presence_vec_ele==0)=nan
[~,min_ind] = nanmin(bsxfun(@times,presence_vec_ele,error1),[],2)
error1(setdiff(1:numel(error1),min_ind))=NaN