2

指定されたパラメーターに基づいて整数をエンコードする方法を見つけようとしています。たとえば、次のテーブルが与えられます。

integer = 0, encoding is 3294 

integer = 1, encoding is 128 

integer = 2, encoding is 2098

どうすればこれを行うことができますか?関数 dec2bin を見てきましたが、それはまさに私が必要としているものではありません。私の入力はベクトルにx = [ 2 1 0 ]なり、出力は vector になりy = [2 0 9 8 1 2 8 3 2 9 4]ます。

アドバイスやヘルプをいただければ幸いです。

4

2 に答える 2

3

エンコーディングは、これを説明するのに最適な言葉ではないかもしれません。この答えは、検索の方向に過ぎません。

dictionaryhashtableまたはmapデータ構造を調べます。以下のコードは、この投稿で説明されているソリューションに基づいています

c = containers.Map;
c('0') = 3294; 
c('1') = 128;
c('2') = 2098;
keys(c) 
values(c)

適切な using を追加し、整数型を直接使用してキャストと変換のオーバーヘッドを削除する必要がある場合があります。

于 2013-03-09T22:40:52.143 に答える
1

encエンコーディング テーブルを 2 つの列 (各行には整数とそれに対応するエンコーディング文字列が含まれる) を持つセル配列として表す場合、次の簡潔なワンライナーを使用できます。

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

説明

上記のソリューションは、実際には次の 3 つのことを行います。

  1. 入力ベクトルの各整数を、次xの対応するエンコード文字列に置き換えますenc

    arrayfun(@(v)enc{find([enc{:, 1}] == v), 2}', x(:), 'UniformOutput', 0)
    
  2. を使用して、すべての文字列を 1 つの列に連結しますcell2mat

  3. を使用して数値ベクトルに変換しstr2numます。str2num行に適用されるため、各文字 (数字) は個別に処理されます。

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

結果は次のとおりです。

y =
     2     0     9     8     1     2     8     3     2     9     4
于 2013-03-09T22:46:08.460 に答える