-1

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

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 に答える