Reorganizing integer vector preserving order

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

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개)

카테고리

도움말 센터File Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

제품

태그

질문:

2023년 5월 25일

답변:

Jon
2023년 5월 25일

Community Treasure Hunt

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

Start Hunting!

Translated by