如何计算向量的汉明权重?
Posted
技术标签:
【中文标题】如何计算向量的汉明权重?【英文标题】:How to calculate the Hamming weight for a vector? 【发布时间】:2016-08-08 08:38:19 【问题描述】:我正在尝试在 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
如果你能帮助我,我将不胜感激。
【问题讨论】:
这是 Octave,不是 MATLAB 八度和matlab类似 相似但不一样。因此,您应该始终说明您使用的是 octave 还是 matlab,或者代码是否应该在两个系统上运行。 那是我的代码必须在两个系统上运行,谢谢。 您的代码不能在两个程序中运行!endfunction
不是 MATLAB 命令。
【参考方案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
如您所见,您感兴趣的是每一行的总和,而不是每一列。使用sum(x, 2)
的第二个输入参数,它指定了您想要求和的维度。
请注意,这种方法非常慢,正如您在 this question 中看到的那样。
编辑
要使其成为有效且有意义的 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.
【讨论】:
以上是关于如何计算向量的汉明权重?的主要内容,如果未能解决你的问题,请参考以下文章
文本挖掘——文本特征TFIDF权重计算及文本向量空间VSM表示