如果将编码表表示为enc
具有两列的元胞数组(每行包含一个整数及其对应的编码字符串),则可以使用以下简洁的单行:
y = str2num(cell2mat(arrayfun(@(v)enc{find([enc{:, 1}] == v), 2}', x(:), 'UniformOutput', 0)))'
解释
上述解决方案实际上做了三件事:
x
用来自 的相应编码字符串替换输入向量中的每个整数enc
:
arrayfun(@(v)enc{find([enc{:, 1}] == v), 2}', x(:), 'UniformOutput', 0)
使用 将所有字符串连接成一列cell2mat
。
使用 将其转换回数值向量str2num
。str2num
应用于行,因此每个字符(数字)都被单独处理。
例子
enc = {0, '3294'; 1, '128'; 2, '2098'};
x = [2, 1, 0];
y = str2num(cell2mat(arrayfun(@(v)enc{find([enc{:, 1}] == v), 2}', x(:), 'UniformOutput', 0)))'
结果是:
y =
2 0 9 8 1 2 8 3 2 9 4