2017-06-16 70 views
2

說我有這個向量A:如何在matlab中重命名值?

A=[2 
92 
91 
91 
91 
92 
9 
92 
-1 
91]; 

我想寫一個代碼,最小的項重命名爲1,下一個最小的條目2,依此類推。所以,我想要的輸出是:

B=[2 
5 
4 
4 
4 
5 
3 
5 
1 
4]; 

我該如何做一個短而高效的代碼?我已經能夠編寫的代碼是「逐個檢查並重命名」類型的代碼,這是非常低效的。

U=unique(A); 
for a=1:size(U,1) 
    for b=1:size(A,1) 
     if A(b,1)==U(a,1) 
      B(b,1)=a; 
     end 
    end 
end 

有沒有可能寫一個沒有使用for循環,否則有效嗎?

回答

4

由於unique排序輸出結果,你想要的陣列自動功能內置,可通過第三輸出訪問:

>> A=[2;92;91;91;91;92;9;92;-1;91]; 
>> [~,~,B] = unique(A) 
B = 
    2 
    5 
    4 
    4 
    4 
    5 
    3 
    5 
    1 
    4 
+0

該死!我現在感到很尷尬。 – Kristada673