如何计算向量的汉明权重?

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表示

获取整数数组汉明距离的最快方法

文本挖掘——文本特征TFIDF权重计算及文本向量空间VSM表示

『IR 信息检索入门必看』#3 向量空间模型(简明)

如何通过应用 WEKA 计算垃圾短信的“特征向量”?

如何使用 SVM 的权重向量和逻辑回归进行特征重要性?