Collapsing integer data into consecutive integers?

3 次查看(过去 30 天)
I have a matrix of values that include integers >= 0. There are repeats, and also gaps in consecutiveness. I would like to collapse the data into consecutive integers, keeping the order intact.
Example: [ 0 1 4 4 1 5 8 1 4]
would go to
[ 0 1 2 2 1 3 4 1 2]
I can do this with loops and brute force, but I'm wondering if there's any quick way to do this since it is frequently called within a loop?
Thanks!
  3 个评论
John
John 2013-6-18
It looks like you just divided everything by 2, rounding up.
Mark
Mark 2013-6-18
Not consecutive in the array, but consecutive in the counting of unique numbers in the original. I.e., there are 5 unique numbers in the original vector, 0 1 4 5 and 8. I wanted to map those to 0 1 2 3 4. (The divide by two and round was just coincidence!) The problem has been solved below. Thanks.

请先登录,再进行评论。

采纳的回答

Tom
Tom 2013-6-18
[~,~,I] = unique([ 0 1 4 4 1 5 8 1 4]);
disp(I-1)

更多回答(1 个)

Iain
Iain 2013-6-18
Ex = [ 0 1 4 4 1 5 8 1 4]; % A row
V = unique(Ex); % should be a row
L = bsxfun(@eq,Ex,V);
Collapsed = [0:(numel(V)-1)]*L;
Reconstructed = V' * L;

类别

Help CenterFile Exchange 中查找有关 Multidimensional Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by