2017-06-16 58 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