-1

编写一个函数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 ...等

当 x < 0 时,规则 encodedgt(x) = 1 - encodedgt(-(x+1))。

例如,

编码gt([1 12 -3])

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


所以我已经写了一个可以很好地处理正数的脚本,如下所示......

函数 x = 编码gt(x)

编码 = {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 < 0 时,codedgt(x) = 1 - encodedgt(-(x+1))。所以我考虑过使用 if 语句,但是它并没有完全按照计划进行。有没有更好的方法来解决这个问题?

4

1 回答 1

0

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

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

    序列=[0 0 1 1 0 0 1];
    序列=[序列[0 0 1 0 0 1 1]]

    序列 = 0 0 1 1 0 0 1 0 0 1 0 0 1 1

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

    function(x)
    for i=x
    % 做你需要的,比如查找 i 以获得它的编码向量 end

于 2013-03-13T01:03:09.070 回答