我试图弄清楚如何根据给定的参数对整数进行编码。例如,给了我一张桌子:
integer = 0, encoding is 3294
integer = 1, encoding is 128
integer = 2, encoding is 2098
等等
我该怎么做呢?我已经查看了函数 dec2bin,但这并不是我所需要的。例如,我的输入将是一个向量,x = [ 2 1 0 ]而输出将是向量y = [2 0 9 8 1 2 8 3 2 9 4]。
任何建议或帮助表示赞赏!
编码可能不是描述这一点的最佳词。这个答案只是您搜索的一个方向。
我会看看任何dictionary,hashtable或map数据结构。下面的代码基于本文中描述的解决方案
c = containers.Map;
c('0') = 3294;
c('1') = 128;
c('2') = 2098;
keys(c)
values(c)
您可能需要添加正确的使用,并且可能直接使用整数类型来消除强制转换和转换开销。
如果将编码表表示为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