簡單的方法是使用重複的界限外分配。在這些情況下,MATLAB將自動填充任何缺失的條目與0
。具體方法如下:
%// Some test variables
a = rand; g = rand;
b = rand; h = rand;
c = rand; i = rand;
d = rand; j = rand;
e = rand; k = rand;
f = rand; l = rand;
%// base matrix
base = [
a b c d e f 0;
0 g h i j k l];
%// use out-of-bounds assignment
n = 3;
output = base;
for ii = 1:n
output(end+1:end+size(base,1), size(base,1)*ii+1:end+size(base,1)) = base;
end
難的方法是更快的方式(相關時n
大和/或需要重複這個非常頻繁)。弄清楚其背後指數將在由與原矩陣值最終矩陣填充圖案,然後生成這些索引列表,並指定這些值的指標:
[b1,b2] = size(base);
[ii,jj,vv] = find(base);
inds = bsxfun(@plus, (ii + (n+1)*b1*(jj-1)).', (0:n).'*b1*(1 + (n+1)*b1));
output = zeros((n+1)*b1, b2+n*b1);
output(inds) = repmat(vv.', n+1, 1)
我會離開它,因爲一個練習,你找出這裏發生了什麼確切:)
是'N'總是偶數?或者你認爲你顯示的矩陣是「2」高嗎? – Floris
爲什麼在SO上有這麼多的matlab作業問題,沒有任何代碼? – Coderchu
顯示你用'kron'試過的東西+1 –