如何在Matlab中替换向量中的多个元素?

FF0*_*605 4 matlab replace element vector

例如

我有一个矢量:

a=[4 4 15 15 9 9 7 7];
Run Code Online (Sandbox Code Playgroud)

我如何有效地将所有4s替换成1s,所有15s分为2s,9s分为3s,7s分为4s?而不是重复编码:

a(a==4)=1; a(a==15)=2; a(a==9)=3; a(a==7)=4; ....
Run Code Online (Sandbox Code Playgroud)

如果我有太多的数字需要更换?

非常感谢你!

seb*_*ian 8

如果你真的想要一个"abitrary"替换,那么原始值和替换值之间没有直接关系,你可以使用ismember:

>> map = [4 1; 15 2; 9 3; 7 4];
>> [~, loc] = ismember(a, map(:,1));
>> a(:) = map(loc,2)

a =

     1     1     2     2     3     3     4     4
Run Code Online (Sandbox Code Playgroud)

根据您的大背景,您可能需要检查unique,因为您似乎在做类似的事情.在这种情况下,例如:

>> [~,~,a2] = unique(a, 'stable')

a2 =

     1     1     2     2     3     3     4     4
Run Code Online (Sandbox Code Playgroud)

这适用于您的示例,并且不需要您构建地图,因为它根据外观顺序使其成为自己的地图.

或者,如果你的Matlab版本早于'stable'unique` 的属性那么

>> [~,~,a2] = unique(a)

a2 =

     1     1     4     4     3     3     2     2
Run Code Online (Sandbox Code Playgroud)

这与您的替换类似,尽管这些数字指的是不同元素的排序列表中每个元素的索引a,而您的示例似乎使用未排序的索引 - 尽管这可能只是您示例的任意选择.