Round towards specific values in an array
10 views (last 30 days)
Show older comments
Hi, when I have 2 vectors, one vector has a larger length than the other. But they both have values that are approximately the same. Now I want to round and locate each element of the large vector in the short vector. So, for example:
A = [2000 1999 1998 1996 1993 .... 0] (dim=1 x a)
B = [2000 1995 1990 1985 1980 .... 0] (dim=1 x b)
I would now like to see that for example {2000 1999 1998} of A are rounded to {2000} in B and {1996 1993} in A to {1995} in B so that I can find the index of an element in B that corresponds to one (or more) rounded values in A.
I can imagine that you can do this with some kind of for-loop, but preferably I do not use that since it will become a nested loop and will cost a lot of computation time.
THanks a lot
0 Comments
Answers (4)
Tom Gaudette
on 29 Mar 2011
% This solutions currently does it with loops just to get a picture of the problem.
A = [2000 1999 1998 1996 1993 1990];
B = [2000 1995 1990 1985 1980];
for idx1=1:length(A);
for idx2=1:length(B);
C(idx2,idx1)=A(idx1)-B(idx2);
end;
end
% Now find the index of the min values
[v,i]=min(abs(C));
% 'i' now contants the list of locations in B that corespond to the nearest
% A value
B(i)
1 Comment
Teja Muppirala
on 29 Mar 2011
This is one possible solution. If your vectors are very long though, this might be inefficient because it temporarily makes a big matrix to calculate all the differences.
A = -5 + 35*rand(1,100);
B = 0:5:25;
[~,I] = min(abs(bsxfun(@minus,A,B')));
Anew = B(I);
[A; Anew]
0 Comments
Steven Lord
on 8 Aug 2022
A = [2000 1999 1998 1996 1993].';
B = [2000 1995 1990 1985 1980].';
Assuming all the elements of B are unique, interpolate to 'nearest'.
C = interp1(B, B, A, 'nearest');
result = table(A, C, 'VariableNames', ["Original data", "Rounded data"])
0 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!