Matlab:汉明权重的索引数组

Posted

技术标签:

【中文标题】Matlab:汉明权重的索引数组【英文标题】:Matlab: index array by Hamming Weights 【发布时间】:2014-04-05 11:42:33 【问题描述】:

a 包含索引及其出现。现在需要使用汉明权重更改索引,以便将具有相同汉明权重的索引相加。如何进行汉明权重索引?在 Matlab 中有什么现成的命令吗?

>> a=[1,2;2,3;5,2;10,1;12,2]

     1     2
     2     3
     5     2
    10     1
    12     2
    13     8


>> dec2bin(a(:,1))

ans =

0001
0010
0101
1010
1100
1101

目标:按汉明权重索引事物

HW    Count
1     5 (=2+3)
2     5 (=2+1+2)
3     8 (=8)

【问题讨论】:

ERR..​​.我实现了一个更简单的原始问题解决方案,只需在整个初始向量上使用硬件,就像这里 ***.com/a/9397290/164148 然后只是 hist(HW)。无论如何,感谢您的意见,最简单的解决方案很有效。 【参考方案1】:

你可以这样做:

a = [1,2;2,3;5,2;10,1;12,2;13,8]

需要添加以下行,同时考虑零重量:

if nnz(a(:,1)) == numel(a(:,1)); a = [0,0;a]; end
% or just
a = [0,0;a];   %// wouldn't change the result

获取索引

rowidx = sum( de2bi(a(:,1)), 2 )

得到总和

sums = accumarray( rowidx+1, a(:,2) ) %// +1 to consider Hammingweight of zero

得到Hammingweight向量

HW = unique(rowidx)

返回:

rowidx =

     1
     1
     2
     2
     2
     3


sums =

     5
     5
     8

大家一起:

result = [HW, sums]
%or
result = [unique(rowidx), accumarray(rowidx+1,a(:,2))]

result =

     0     0
     1     5
     2     5
     3     8

如果您对0 0 行感到困扰,请将其过滤掉

result(sum(result,2)>0,:)

a = [0,2;2,3;5,2;10,1;12,2;13,8] 的结果将是:

result =

     0     2
     1     3
     2     5
     3     8

【讨论】:

...缺少 HW 列。 为什么 a = [0,2;2,3;5,2;10,1;12,2;13,8]; rowidx = sum( de2bi(a(:,1)), 2 ); sums = accumarray( rowidx, a(:,2) ) 会失败? @hhh:“为什么”很明显,因为以hammingweight为索引,对0无效。已修复,请参阅编辑。【参考方案2】:

试试这个 -

a = [1     2
     2     3
     5     2
    10     1
    12     2
    13     8]

HW = dec2bin(a(:,1)) - '0'; 

out = accumarray(sum(HW,2), a(:,2), [], @sum);%%// You don't need that "sum" option it seems, as that's the default operation with accumarray

final_out = [unique(sum(HW,2)) out]

输出 -

a =

     1     2
     2     3
     5     2
    10     1
    12     2
    13     8


final_out =

     1     5
     2     5
     3     8

【讨论】:

以上是关于Matlab:汉明权重的索引数组的主要内容,如果未能解决你的问题,请参考以下文章

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

Matlab的数组索引

转换向量索引超出数组边界 - matlab

MATLAB:在数组旁边打印索引

MATLAB:无法调用或索引到临时数组[重复]

Matlab - 使用矩阵作为数组向量的索引