用平方排列子矩阵替换基矩阵中的元素

时间:2017-04-17 10:59:31

标签: matlab matrix cell permutation

我有一个稀疏奇偶校验矩阵(由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

我被告知使用' cell'对象,这是将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矩阵(就像我一样)我不太熟悉' cell'结构...但是,正如你所看到的,Mc是一个如此大的整数,我不知道是否可以处理它。

你有没有其他方法这样做的原始矩阵维(L * ms) dc 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 个答案:

答案 0 :(得分: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的一个元素。