我在解决这个问题时遇到了麻烦,我向你寻求帮助..
假设我有一个向量
vector1 = [ 1 1 2];
带有关联的错误向量(vector1
的第一个元素与error1
的第一个元素相关联)
error1= [0.08 0.9 0.3];
如果vector1包含2个相等的元素(在这种情况下是第一个和第二个元素)我应该用NaN替换具有最高错误的元素
感谢任何帮助。
答案 0 :(得分:3)
我假设以下事项:
vector1
可以有两个以上相等的元素。error1
可以包含负值。这可能不是最快的解决方案,但据我所说,它可行。
% 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