Round towards specific values in an array
이전 댓글 표시
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
답변 (4개)
Tom Gaudette
2011년 3월 29일
% 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
Adnane Youcef
2022년 8월 8일
편집: Adnane Youcef
2022년 8월 8일
it works thnx
Teja Muppirala
2011년 3월 29일
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]
Tom R
2012년 7월 31일
1 개 추천
Check this function out.
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"])
카테고리
도움말 센터 및 File Exchange에서 Logical에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!