MATLAB: Insert Zeros in every n-rows at the regular interval in 3rd dimension for an existing 3D Matrix.

incertrows

I have a m*n*t matrix. In 3rd dimension t, I want to insert m*n zeros at a particular interval. For example input
A(:,:,1) =
9 8 -8 -3
-3 -3 7 8
-3 -10 -1 8
10 5 -10 -10
4 7 11 13
A(:,:,2) =
14 9 7 5
3 5 2 11
15 12 15 8
7 10 9 5
14 4 15 13
A(:,:,3) =
14 17 17 15
13 21 21 19
15 21 17 17
14 21 18 13
17 16 13 17
A(:,:,4) =
14 21 15 19
15 12 20 11
15 5 4 9
7 6 15 16
3 2 17 10
result would be:
A(:,:,1) =
9 8 -8 -3
-3 -3 7 8
-3 -10 -1 8
10 5 -10 -10
4 7 11 13
A(:,:,2) =
14 9 7 5
3 5 2 11
15 12 15 8
7 10 9 5
14 4 15 13
A(:,:,3) =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
A(:,:,4) =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
A(:,:,5) =
14 17 17 15
13 21 21 19
15 21 17 17
14 21 18 13
17 16 13 17
A(:,:,6) =
14 21 15 19
15 12 20 11
15 5 4 9
7 6 15 16
3 2 17 10
A(:,:,7) =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
A(:,:,8) =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Thanks!

Best Answer

Assuming every page really is m x n (cf. Stephen's comment),
A=rand(3,4,6); %fake data
pattern=[1 1 1 0 0]; %insert zero every 4th and 5th page
[m,n,t]=size(A);
q=floor(t/nnz(pattern));
idx=repmat( reshape(pattern,1,1,[]) , 1,1,q)& true(m,n);
out=zeros(size(idx));
out(idx)=A(1:nnz(idx)),
results in
out(:,:,1) =
0.8147 0.9134 0.2785 0.9649
0.9058 0.6324 0.5469 0.1576
0.1270 0.0975 0.9575 0.9706
out(:,:,2) =
0.9572 0.1419 0.7922 0.0357
0.4854 0.4218 0.9595 0.8491
0.8003 0.9157 0.6557 0.9340
out(:,:,3) =
0.6787 0.3922 0.7060 0.0462
0.7577 0.6555 0.0318 0.0971
0.7431 0.1712 0.2769 0.8235
out(:,:,4) =
0 0 0 0
0 0 0 0
0 0 0 0
out(:,:,5) =
0 0 0 0
0 0 0 0
0 0 0 0
out(:,:,6) =
0.6948 0.0344 0.7655 0.4898
0.3171 0.4387 0.7952 0.4456
0.9502 0.3816 0.1869 0.6463
out(:,:,7) =
0.7094 0.6797 0.1190 0.3404
0.7547 0.6551 0.4984 0.5853
0.2760 0.1626 0.9597 0.2238
out(:,:,8) =
0.7513 0.6991 0.5472 0.2575
0.2551 0.8909 0.1386 0.8407
0.5060 0.9593 0.1493 0.2543
out(:,:,9) =
0 0 0 0
0 0 0 0
0 0 0 0
out(:,:,10) =
0 0 0 0
0 0 0 0
0 0 0 0