我有一个稀疏奇偶校验矩阵(由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;
非常感谢您的关注,祝您今天过得愉快。
答案 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
的一个元素。