replacing ascending numbers with continous numbers

조회 수: 2 (최근 30일)
Daniel
Daniel 2014년 1월 22일
댓글: Daniel 2014년 1월 22일
Hello everybody,
I am looking for a fast and efficient way to convert a vector of non continous ascending numbers to continous numbers.
As an example:
The vector
[4 20 35 22 10 49]
should become
[1 3 5 4 2 6]
at the moment I'm using a for loop, look for the lowest number write the runtime index into the result vector and set the position in the original vector to an illegal value. I know this is not the best way but it was the only one I could think of.
Also I'm not doing a single vector at a time but doing this to the columns of a matrix.
Thank you

채택된 답변

Amit
Amit 2014년 1월 22일
A = [4 20 35 22 10 49];
B = 1:numel(A);
[~,C] = sort(A);
B(C) = B; % Your vector
  댓글 수: 3
Amit
Amit 2014년 1월 22일
% Your matrix is named A
[m,n] = size(A);
B = 1:m;
[~,C] = sort(A);
D = zeros(m,n);
for i = 1:n
D(C(:,i),i) = B;
end
Daniel
Daniel 2014년 1월 22일
Mile grazie! Thank you very much. This is way more elegant than anything I managed to butchered.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by