Combining two vectors into a new one
    14 次查看(过去 30 天)
  
       显示 更早的评论
    
Hi, 
I am working on a dynamic programming problem and I now have two equal-sized vectors, say vector A and B. I am trying to generate a new vector that starts with the first element of vector B, then finds the closest value in A and takes it's index value, then records the value corresponding to this index in B. I want to make a loop and cover all values in my vector B. Is there a way to code this? (Vector A and B won't have the exact same values unfortunately, so the code will need to find the closest element's index)
Thanks!
0 个评论
采纳的回答
  Johan
      
 2022-3-11
        I don't know if there is a builtin function to do that but you can achieve using translation, logical condition and find: 
A = randi(10,5,1);
B = randi(10,5,1);
 % compute difference of each element of B with each element of A
 abs(B'-A)
 % minimum difference value
 min(abs(B'-A))
 % Create a logical mask of the position of the minimum difference
 min_distance_mask = abs(B'-A) == min(abs(B'-A))
%use find to get the index and rescale the index using the width of the array
%Equal distance increase the size of C compared to A and B
 C = mod(find(min_distance_mask)-1,size(min_distance_mask,2))+1 
更多回答(1 个)
  KSSV
      
      
 2022-3-11
        A = rand(3) ;
B = rand(2) ; 
idx = knnsearch(B(:),A(:))
Also have a look on ismember, ismembertol. 
0 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!