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

时间:2017-12-07 09:16:17

标签: matlab cell-array

我有一个包含一些描述的单元格数组,即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 个答案:

答案 0 :(得分:1)

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

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

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

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

% 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'};