Insert Zeros (m -rows) in an existing Matrix every n-rows in an efficient way

3 ビュー (過去 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!

採用された回答

Azzi Abdelmalek
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 件のコメント
Tim
Tim 2014 年 1 月 6 日
perfect! Thanks a lot
Jorge Ignacio Cisneros Saldana
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
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)
Jos (10584) 2014 年 1 月 6 日
But you can use INSERTROWS:
% 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)
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
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 ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by