Reorganizing integer vector preserving order

조회 수: 1 (최근 30일)
Josue Ortega
Josue Ortega 2023년 5월 25일
답변: Jon 2023년 5월 25일
Hi, I have a vector that is a randmperm of n, so it looks like this
x= 2 5 6 13 18 8 14 4 9 3 1 12 16 15 7 11 10 17
Now I have deleteded some entries, based on another different program, in this case 11 and 18, and get the following vector
x'= 2 5 6 13 8 14 4 9 3 1 12 16 15 7 10 17
I want to reorganize x' in such a way that it now becomes a randmperm of 1:size(x'), i.e. that number 12 becomes 11, that number 13 becomes 12, and so on, so that my desired output is
y= 2 5 6 12 8 13 4 9 3 1 11 15 14 7 10 16
Is there an easy way to do this?
  댓글 수: 1
Josue Ortega
Josue Ortega 2023년 5월 25일
also, is there a way to make each element of x that is smaller than p, one unit less than its current value?
say something like x(x<p)=p-1?

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

채택된 답변

Jon
Jon 2023년 5월 25일
I think this does what you are asking
xp = [2 5 6 13 8 14 4 9 3 1 12 16 15 7 10 17];
[~,idx] = sort(xp);
xnew(idx) = 1:numel(xp)
xnew = 1×16
2 5 6 12 8 13 4 9 3 1 11 15 14 7 10 16

추가 답변 (0개)

카테고리

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

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by