Insert Zeros (m -rows) in an existing Matrix every n-rows in an efficient way
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Tim
am 6 Jan. 2014
Kommentiert: Jorge Ignacio Cisneros Saldana
am 10 Mai 2018
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 Kommentare
Akzeptierte Antwort
Azzi Abdelmalek
am 6 Jan. 2014
[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 Kommentare
Jorge Ignacio Cisneros Saldana
am 9 Mai 2018
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
Weitere Antworten (2)
Andrei Bobrov
am 6 Jan. 2014
Bearbeitet: Andrei Bobrov
am 6 Jan. 2014
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;
1 Kommentar
Jos (10584)
am 6 Jan. 2014
% 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 Kommentare
Jos (10584)
am 6 Jan. 2014
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
am 9 Mai 2018
It does not work error
Error in Insertzeros (line 30) B = insertrows(A,0,repmat(n:n:size(A,1),m,1));
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!