Collapsing integer data into consecutive integers?

2 ビュー (過去 30 日間)
Mark
Mark 2013 年 6 月 18 日
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;
  1 件のコメント
Mark
Mark 2013 年 6 月 18 日
Thanks to both.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by