2016-08-08 4 views
0

私はMatlabでベクトルのハミング重みを計算しようとしています。ベクトルのハミングウェイトを計算するには?

function Hamming_weight (vet_dec) 
Ham_Weight = sum(dec2bin(vet_dec) == '1')  
endfunction 

ベクトルは次のとおりです。

Hamming_weight ([208 15 217 252 128 35 50 252 209 120 97 140 235 220 32 251]) 

しかし、これは私が欲しいものではありません、以下の結果、得られます。あなたは私を助けることができれば

Ham_Weight = 

    10 10 9 9 9 5 5 7 

を、私は非常に感謝されますお願いします。

+0

これはOctaveであり、MATLABではありません –

+0

Octaveはmatlabと似ています。 –

+0

似ていますが、同じではありません。したがって、オクターブやMATLABを使用している場合、または両方のシステムでコードを実行する必要がある場合は、常に言いたいことがあります。 – Andy

答えて

1

あなたは間違った次元を合計しています!

sum(dec2bin(vet_dec) == '1',2).' 
ans = 
    3 4 5 6 1 3 3 6 4 4 3 3 6 5 1 7 

dec2bin(vet_dec)

は次のように行列を作成します:あなたが見ることができるように

11010000 
00001111 
11011001 
11111100 
10000000 
00100011 
00110010 
11111100 
11010001 
01111000 
01100001 
10001100 
11101011 
11011100 
00100000 
11111011 

は、あなたがそれぞれの行ではなく、各列の合計に興味を持っています。 2番目の入力引数をsum(x, 2)に使用します。これは合計するディメンションを指定します。

this questionからわかるように、このアプローチはひどく遅いことに注意してください。このため

EDITが有効、かつ有意義なMATLAB関数であることを、あなたはあなたの関数定義を少し変更する必要があります。

function ham_weight = hamming_weight(vector)  % Return the variable ham_weight 

ham_weight = sum(dec2bin(vector) == '1', 2).'; % Don't transpose if 
               % you want a column vector 
end            % endfunction is not a MATLAB command. 
関連する問題