【问题标题】:How to rename values in order in matlab?如何在matlab中按顺序重命名值?
【发布时间】:2017-06-16 07:15:23
【问题描述】:

假设我有这个向量 A:

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 循环的情况下编写一种,或者另一种高效的方法?

【问题讨论】:

    标签: matlab for-loop


    【解决方案1】:

    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
    

    【讨论】:

    • 该死!我现在觉得很尴尬。
    猜你喜欢
    • 2015-01-24
    • 2014-08-23
    • 2017-04-10
    • 2020-10-20
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多