例如
我有一个向量:
a=[4 4 15 15 9 9 7 7];
如何高效地将所有 4 替换为 1,将所有 15 替换为 2,将 9 替换为 3,将 7 替换为 4?而不是重复编码:
a(a==4)=1; a(a==15)=2; a(a==9)=3; a(a==7)=4; ....
万一我的号码太多要替换呢?
非常感谢!
如果你真的想要一个“任意”替换,原始值和替换值之间没有直接关系,你可以使用 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
根据更大的上下文,您可能需要检查 unique
,因为看起来您在做类似的事情。例如在这种情况下:
>> [~,~,a2] = unique(a, 'stable')
a2 =
1 1 2 2 3 3 4 4
这适用于您的示例,并且不需要您构建 map ,因为它会根据出现的顺序制作自己的 map 。
或者,如果您的 Matlab 版本早于 unique` 的 'stable'
属性,则
>> [~,~,a2] = unique(a)
a2 =
1 1 4 4 3 3 2 2
这类似于您的替换,尽管这些数字指的是 a
中不同元素的 sorted 列表中每个元素的索引,而您的示例似乎使用未排序的索引 - 虽然这可能只是您示例的任意选择。
我是一名优秀的程序员,十分优秀!