编写一个函数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 语句,但是它并没有完全按照计划进行。有没有更好的方法来解决这个问题?