Matlab 求一个二元矩阵,使给定的汉明权为常数

Matlab 求一个二元矩阵,使给定的汉明权为常数,matlab,hamming-distance,Matlab,Hamming Distance,给定一个平方二元矩阵。我想得到相距dHamming距离的所有可能的二进制矩阵 假设 A=[1 0 1; 0 1 1; 1 1 0]. 然后得到一个相距一(d)个汉明距离的矩阵 [0 0 1; 0 1 1; 1 1 0]. 在Matlab基础编码方面有什么帮助吗?我希望我在给定的上下文中得到正确的定义。基于这种希望/假设,这可能就是你想要的- combs = dec2base(0:2^9-1,2,9)-'0'; %//'# Find all combinations

给定一个平方二元矩阵。我想得到相距
d
Hamming距离的所有可能的二进制矩阵

假设

A=[1 0 1; 
   0 1 1; 
   1 1 0]. 
然后得到一个相距一(d)个汉明距离的矩阵

[0 0 1; 
 0 1 1; 
 1 1 0].

在Matlab基础编码方面有什么帮助吗?

我希望我在给定的上下文中得到正确的定义。基于这种希望/假设,这可能就是你想要的-

combs = dec2base(0:2^9-1,2,9)-'0'; %//'# Find all combinations
combs_3d = reshape(combs',3,3,[]); %//'# Reshape into a 3D array

%// Calculate the hamming weights between A and all combinations.
%// Choose the ones with hamming weights equal to `1`
out = combs_3d(:,:,sum(sum(abs(bsxfun(@minus,A,combs_3d)),2),1)==1)
因此,
out
的每一个3D切片都将为您提供这样一个
3x3
矩阵,其中
1
a
之间具有汉明权重

看起来你有
9
这样的矩阵-

out(:,:,1) =
     0     0     1
     0     1     1
     1     1     0
out(:,:,2) =
     1     0     1
     0     1     1
     0     1     0
out(:,:,3) =
     1     0     1
     0     0     1
     1     1     0
out(:,:,4) =
     1     0     1
     0     1     1
     1     0     0
out(:,:,5) =
     1     0     0
     0     1     1
     1     1     0
out(:,:,6) =
     1     0     1
     0     1     0
     1     1     0
out(:,:,7) =
     1     0     1
     0     1     1
     1     1     1
out(:,:,8) =
     1     1     1
     0     1     1
     1     1     0
out(:,:,9) =
     1     0     1
     1     1     1
     1     1     0

编辑 对于大的
n
,您需要使用循环-

n = size(A,1);
nsq = n^2;

A_col = A(:).';
out = zeros(n,n,nsq);
count = 1;
for k1 = 0:2^nsq-1
    match1 = dec2bin(k1,nsq)-'0';
    if sum(abs(match1-A_col))==1
        out(:,:,count) = reshape(match1,n,n);
        count = count + 1;
    end
end

哼唱重量
,听起来很滑稽,让我发笑:D@ParagS.Chandakkar哈哈,对不起,我没意识到问题中的拼写错误让我神魂颠倒了!:)谢谢你指出这一点@Divakar,如果矩阵的大小大于3。假设8。那你怎么办呢?由于变量大小最大,此代码无法工作。@SkSarifHassan请查看编辑部分?@SkSarifHassan顺便说一句,
match1=bitget(k1,nsq:-1:1)
可能会更快。