I have a matrix column with a number in each row, but they are not consecutive (per example, from 3 it jumps to 6). How can I turn them into a consecutive order?

1 Ansicht (letzte 30 Tage)
I have a matrix column with a number in each row, but they are not consecutive (per example, from 3 it jumps to 6). How can I turn them into a consecutive order?
  9 Kommentare
Walter Roberson
Walter Roberson am 9 Jan. 2017
I really do not understand the rule to be followed! Why are only the 10 and 12 changed? Why should they become 6 and 9?? How does this generalize?
Eduardo Rocha
Eduardo Rocha am 9 Jan. 2017
Sorry, I gave a bad example. This one is what really happens:
A = [0,1,2,3,6,3,10,6,6,10,12,12,0,2];
It should turn into:
B = [0,1,2,3,4,3,5,4,4,5,6,6,0,2];

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 9 Jan. 2017
A = [0,1,2,3,6,3,10,6,6,10,12,12,0,2];
[~, ~, idx] = unique(A);
t = 0:max(idx)-1;
B = t(idx);
Note: this code relies upon the expected lowest value being 0.

Weitere Antworten (1)

Niels
Niels am 9 Jan. 2017
Bearbeitet: Niels am 9 Jan. 2017
depending on what you really mean by "sorting" and "consecutive", here are 2 different solutions:
A=randi(10,12,4)
A =
8 2 2 2
9 9 2 8
9 6 3 4
1 6 5 3
4 2 1 5
3 9 10 1
9 7 10 2
5 4 5 10
10 6 5 10
2 5 4 6
3 1 10 1
2 3 4 3
% use sort if you just want to sort them
>> A(:,3)=sort(A(:,3))
A =
8 2 1 2
9 9 2 8
9 6 2 4
1 6 3 3
4 2 4 5
3 9 4 1
9 7 5 2
5 4 5 10
10 6 5 10
2 5 10 6
3 1 10 1
2 3 10 3
% but if u want to make them consecutive => (1:#rows)
>> A(:,3)=1:12
A =
8 2 1 2
9 9 2 8
9 6 3 4
1 6 4 3
4 2 5 5
3 9 6 1
9 7 7 2
5 4 8 10
10 6 9 10
2 5 10 6
3 1 11 1
2 3 12 3

Community Treasure Hunt

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

Start Hunting!

Translated by