2017-04-17 124 views
0

我有一个稀疏的奇偶校验矩阵(由1和0组成),我需要用PM替换每个非零元素(1):维的平方置换矩阵N(通常是一个大整数N)。在零元素的情况下,这些将被相同维度的平方空矩阵替换。用平方置换子矩阵替换基矩阵中的元素

让我与你分享其中我的代码的当前状态为:

这是基本基质中,我想通过置换矩阵,以取代其的:

B = zeros((L + ms) * dc, L * dv); 

for i = 1 : 1 : L 
    for j = 1 : 1 : dv  
     B(dc*(i-1)+1 : dc*(ms+i), j+dv*(i-1)) = ones(dc*(ms+1), 1);    
    end 
end 

我一直告诉的方式,用于通过使用“小区”的对象这样做,这是,则初始化H作为空单元格的阵列,将包含相应的子矩阵:

H=repmat({{}},size(B)); 
Mc = 500 % Dimension of the permutation matrix 
MP=randi([1,5],Mc,Mc); % Definition of one permutation matrix 
% It would be desirable that the permutation matrix is different for each replacement 
[H{B==0}]=deal(zeros(Mp)); 
[H{B==1}]=deal(MP); 

但有一个问题即将出现 - 我需要这个矩阵作为后续函数的一个参数,并且非常希望它是一个简单的1和0的矩阵(因为我不是很熟悉'单元'结构...但是,正如你所看到的,Mc是一个如此庞大的整数,我不知道这是否可以被处理。

你有这样做有尺寸的原始矩阵(L * MS)直流了Mc,L DV了Mc作为输出的任何其他方式?

这些都是一些参数可以用来试试:

ms = 2; 
Mc = 600; % any number (specially big ones) could serve for this purpose 
dc = 3; 
dv = 4; 
L = 15; 

提前为您的关注非常感谢,愿你拥有美好的一天。

回答

1

这是如何将其与细胞来完成:

B = Randi([0,1], m, n); % m*n array of 1s and 0s 
H = cell(size(B));   % Define cell array 
Mc = 500;     % Size of replacement matrices 
MP = randi([1,5], Mc, Mc); % Permutation matrix 

H(B==0) = {zeros(Mc, Mc)}; % Set elements of H where B==0 to matrix of zeros 
H(B==1) = {MP};   % Set elements of H where B==1 to permutation matrix 

% Convert to matrix 
Hmat = cell2mat(H);  % Hmat = Mc*m row by Mc*n column matrix 

每个单元元件保持尺寸Mc*Mc的矩阵,在结束这可以转换为一个大的矩阵。请注意您在单元格中使用哪种括号,圆括号()用于逻辑索引,而大括号{}用于将子矩阵分配为单元元素。

例子:

B = [1 0; 1 1]; 
MP = [1 2; 3 4]; 
H(B==0) = {zeros(2, 2)}; 
H(B==1) = {MP};  
Hmat = cell2mat(H);  

% >> Hmat = [1 2 0 0 
%    3 4 0 0 
%    1 2 1 2 
%    3 4 3 4]; 

如果你想更换矩阵MP改变,你将不得不这样做在一个循环,改变在每次迭代MP并用它来取代H一个元素。

+1

谢谢Wolfie!显然这个解决了。 – MisterTellini