2017-05-10 49 views
-1

我想將0內的數組重新縮放到n-1,其中n是數組中唯一元素的數量。例如,如果陣列有4個這樣的獨特的元素:如何根據其獨特元素重新縮放數組?

array = [0; 0; 0; 3; 3; 3; 3; 5; 5; 5; 6; 6] 

那麼輸出將被內0重新縮放到3。因此,對於上述陣列,它將是:

output =[0; 0; 0; 1; 1; 1; 1; 2; 2; 2; 3; 3] 

如何做到這一點?

+1

你只想把每個元素除以2? – gnovice

+0

從'0'到***' 2' ***?究竟如何?例如,如果我的數組是[0; 0; 0; 0],那麼你期望的數組的最後3個元素是***'3' ***(不是從0到2) –

+0

親愛的@ gnovice。 3; 3; 7; 7; 7; 7]。期望的輸出將是0 0 0 1 1 2 2 2 2只是重新排列陣列 –

回答

3

如果要將每個唯一值從0替換爲唯一值的總數減1,並按它們首次出現在數組中的順序進行標記,則可以使用函數的第三個輸出unique像這樣:

array = [0; 0; 0; 3; 3; 3; 3; 5; 5; 5; 6; 6]; 
[~, ~, label] = unique(array, 'stable'); 
label = label-1; 

label = 

    0 
    0 
    0 
    1 
    1 
    1 
    1 
    2 
    2 
    2 
    3 
    3 
+0

親愛的@gnovice我有這個錯誤!錯誤使用單元格/唯一(第85行) 輸入A必須是字符串的單元數組。 Error(in line 68) [〜,〜,index] = unique(array,'stable'); –

+0

你真棒!謝了哥們 –