整数エントリを含む列ベクトルまたは行ベクトルを入力として受け取り、次の表に従って各整数がエンコードされた行ベクトルを出力として生成する関数 encodedgt を作成します。
整数エンコーディング 0 0 0 0 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)
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 < 0 の場合、encodedgt(x) = 1 - encodedgt(-(x+1)) です。したがって、if ステートメントを使用することを考えましたが、正確には計画通りにはなりません。これにアプローチするより良い方法はありますか?