Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:基于Hamming权值的索引数组_Matlab_Hammingweight - Fatal编程技术网

Matlab:基于Hamming权值的索引数组

Matlab:基于Hamming权值的索引数组,matlab,hammingweight,Matlab,Hammingweight,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

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)
试试这个-

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

您可以按如下方式进行操作:

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

需要添加下面的行,也要考虑0的锤重:

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:“为什么”很明显,因为汉明权重用作索引,这对零无效。修复了,请参阅edit.ERR…我发现了一个更容易解决原始问题的方法,只需在整个初始向量上使用HW,就像这里,然后只使用
hist(HW)
。不管怎样,感谢您的输入,最简单的解决方案是岩石。