2017-04-17 65 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