用数字替换元胞数组中的字符串值

Replacing string values in cell array with numbers

我有一个元胞数组,其中包含一些描述,即 my_des

 my_des = [{'FRD'} {'1'}; {'UNFRD'} {'2'}; {'OTH'} {'3'};];

我还有一个大约 5000x1 的元胞数组。此数组中的元素是 'FRD''UNFRD''OTH'

我想做的是用my_des.

中相应的数值替换这些文本值

目前我唯一的想法(我认为这不是很好)是遍历 my_des 并进行字符串替换。


示例

所以说我当前的向量是这样的:

FRD
FRD
OTH
UNFRD
OTH
FRD

那么我想要的输出是这样的:

1
1
3
2
3
1

数字来自my_des数组

您要使用字符'1''2''3'还是只使用数字 1, 2, 3?区别在于 1 行答案和 2 行答案之间的区别!

根据您的示例,我们使用以下数据:

arr = {'FRD'; 'FRD'; 'OTH'; 'UNFRD'; 'OTH'; 'FRD'};

获取 arr 中每个元素的 my_des 内的行索引,并使用它来获取相应的第二列值...

% If you just want the *number* then this is all you need
[~, idx] = ismember(arr, my_des);
% idx is the row within column 1 of my_des where the value in arr is found
% >> idx = [1; 1; 3; 2; 3; 1]

% If you want to get the values my_des then use idx as a row index
out = mydes(idx, 2);
% out is the corresponding values from the 2nd column of my_des, whatever they may be.
% >> out = {'1'; '1'; '3'; '2'; '3'; '1'};

旁白:为什么要通过连接 my_des 的 1 元素元胞数组来声明元胞数组?相反,您可以这样做:

my_des = {'FRD',   '1'; 
          'UNFRD', '2'; 
          'OTH',   '3'};