2

我试图弄清楚如何根据给定的参数对整数进行编码。例如,给了我一张桌子:

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]

任何建议或帮助表示赞赏!

4

2 回答 2

3

编码可能不是描述这一点的最佳词。这个答案只是您搜索的一个方向。

我会看看任何dictionary,hashtablemap数据结构。下面的代码基于本文中描述的解决方案

c = containers.Map;
c('0') = 3294; 
c('1') = 128;
c('2') = 2098;
keys(c) 
values(c)

您可能需要添加正确的使用,并且可能直接使用整数类型来消除强制转换和转换开销。

于 2013-03-09T22:40:52.143 回答
1

如果将编码表表示为enc具有两列的元胞数组(每行包含一个整数及其对应的编码字符串),则可以使用以下简洁的单行:

y = str2num(cell2mat(arrayfun(@(v)enc{find([enc{:, 1}] == v), 2}', x(:), 'UniformOutput', 0)))'

解释

上述解决方案实际上做了三件事:

  1. x用来自 的相应编码字符串替换输入向量中的每个整数enc

    arrayfun(@(v)enc{find([enc{:, 1}] == v), 2}', x(:), 'UniformOutput', 0)
    
  2. 使用 将所有字符串连接成一列cell2mat

  3. 使用 将其转换回数值向量str2numstr2num应用于行,因此每个字符(数字)都被单独处理。

例子

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
于 2013-03-09T22:46:08.460 回答