在列或行向量MATLAB中编码元素

时间:2013-03-13 00:00:14

标签: matlab encoding

编写一个函数codedgt,它将带有整数条目的列或行向量作为输入,并产生一个行向量作为输出,其中每个整数根据下表进行编码

整数编码 0 0 0 0 1 1 0 1 1 0 0 1 1 0 0 1 2 0 0 1 0 0 1 1 3 0 1 1 1 1 0 1 ...等等。

和规则codedgt(x)= 1 - encodedgt( - (x + 1))当x < 0

例如,

  
    

encodedgt([1 12 -3])

         

[0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 1 0 0]

  

所以我已经编写了一个可以正常编号的脚本,以下是......

  
    

function x = encodedgt(x)

         

enc = {0,'0 0 0 1 1 0 1'; 1,'0 0 1 1 0 0 1'; 2,'0 0 1 0 0 1 1'; ...         3,'0 1 1 1 1 0 1'; 4,'0 1 0 0 0 1 1'; 5,'0 1 1 0 0 0 1'; 6,......         '0 1 0 1 1 1 1'; 7,'0 1 1 1 0 1 1'; 7,'0 1 1 1 0 1 1'; 8,......         '0 1 1 0 1 1 1'; 9,'0 0 0 1 0 1 1'; 10,'0 0 0 0 1 0 1'; 11,......         '1 0 1 0 0 0 0'; 12,'0 1 0 1 0'};

         

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

         

  

然而,我并不完全确定如何使用负数。正如问题告诉我的那样,当x <1时,codedgt(x)= 1 - encodedgt( - (x + 1))。所以我考虑使用if语句,但是它并没有完全按照计划出来。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

你的问题不是很具体,所以很难确切知道你需要什么。您需要的一些工具:

  • 如何连接向量。为此,请使用cat或仅使用以下方法:

      
        

    sequence = [0 0 1 1 0 0 1];
        sequence = [sequence [0 0 1 0 0 1 1]]

             

    sequence = 0 0 1 1 0 0 1 0 0 1 0 0 1 1

      
  • 如何遍历向量。为此,请用于:

      

    函数(x)的
        对于i = x
          %做你需要的,就像查找i来获得它的编码向量     端