Insert Zeros (m -rows) in an existing Matrix every n-rows in an efficient way
4 次查看(过去 30 天)
显示 更早的评论
I've data like this (the actualy matrix is much bigger)
A =
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
Let's say I want to insert 2 rows of zeros (m=2, zeros(2,2)) every 3 lines (n=3), so that the result would be:
A =
1 1
2 2
3 3
0 0
0 0
4 4
5 5
6 6
0 0
0 0
7 7
8 8
9 9
0 0
0 0
10 10
11 11
12 12
0 0
0 0
Is there a quick way to do it? Online I found the "insertrows"-function but that didn't work... Thanks a lot in advance!
0 个评论
采纳的回答
Azzi Abdelmalek
2014-1-6
[n,m]=size(A)
B=permute(reshape(A',m,3,[]),[2 1 3]);
p=size(B,3)
C=[B;zeros(2,m,p)]
out=reshape( C(:,:),[],m,1)
2 个评论
Jorge Ignacio Cisneros Saldana
2018-5-9
The result is wrong
1 7 2 8 3 9 0 0 0 0 1 7 2 8 3 9 0 0 0 0 4 10 5 11 6 12 0 0 0 0 4 10 5 11 6 12 0 0 0 0
更多回答(2 个)
Andrei Bobrov
2014-1-6
编辑:Andrei Bobrov
2014-1-6
m = 3;
k = 2;
n = size(A);
out = reshape([reshape(A,m,[]);zeros(k,n(1)/m*n(2))],[],n(2));
or
m = 3;
k = 2;
n = size(A);
c = ones(1,n(2));
t = rem((0:n(1)*(k/m+1)-1)',m+k)+1 <= m;
out = t*c
out(t(:,c)) = A;
Jos (10584)
2014-1-6
% data
A = cumsum(ones(12,2),1) % as above
n = 3 ;
m = 2 ;
% engine
B = insertrows(A,0,repmat(n:n:size(A,1),m,1))
btw, I am the author of this function, so I might be a little biased ;-)
3 个评论
Jos (10584)
2014-1-6
The trick is to use the same insertion location multiple times. I acknowledge that this might be a little unclear when reading the documentation.
Jorge Ignacio Cisneros Saldana
2018-5-9
It does not work error
Error in Insertzeros (line 30) B = insertrows(A,0,repmat(n:n:size(A,1),m,1));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!