# increase the length of a martix every 5 rows

Asked by antonet on 5 Aug 2012
Latest activity Commented on by Azzi Abdelmalek on 5 Aug 2012

Dear all,

I have a matrix (double array) of dimension 40000 by 7 and I want to increase the length of this matrix every 5 rows by adding a cell NaN.

For instance, if I have initially

``` A=[2.4332    4.1477;
2.6073    4.5900;
2.2310    3.7442;
2.4555    4.1178;
2.5096    4.1946;
2.7517    4.7802;
2.8372    4.9423;
2.9577    5.1563;
3.2365    5.6061;
3.0658    5.3787;
2.9244    5.0497;
2.6104    4.4623;
2.5419    4.4164;
2.4947    4.3577;
2.5633    4.7050
]```

then I want

``` A=[2.4332    4.1477;
2.6073    4.5900;
2.2310    3.7442;
2.4555    4.1178;
2.5096    4.1946;
NaN        NaN
2.7517    4.7802;
2.8372    4.9423;
2.9577    5.1563;
3.2365    5.6061;
3.0658    5.3787;
NaN        NaN
2.9244    5.0497;
2.6104    4.4623;
2.5419    4.4164;
2.4947    4.3577;
2.5633    4.7050;
NaN        NaN
]```

I am looking for an efficient code (1-2 lines if possible)

thank you very much

## Products

No products are associated with this question.

Answer by Oleg Komarov on 5 Aug 2012

The efficient code:

```[r,c]       = size(A);
Anew(idx,:) = A;
```

The two line code:

```Anew = NaN(size(A,1) + size(A,1)/5,size(A,2));
Anew((1:size(A,1)) + reshape(repmat(0:floor(size(A,1)/5)-1,5,1),1,size(A,1)),:) = A;
```

Walter Roberson on 5 Aug 2012

Slightly corrected version of Andrei's code, expressed as a function:

```function Aout = answer45305_3(A)
d  = 5;
m = size(A,1);
k = m + floor(m/d);
Aout = nan(k,size(A,2));
Aout(~~rem(1:k,d+1),:) = A;
end
```

My tests indicate that this is just shy of 3 times slower than Oleg's versions.

Matt Fig on 5 Aug 2012

I'll take a stab at it.

```function Anew = insert_nansmatt(A,x)
% Insert a row of nans in A every x rows.
% A need not have mod(size(A,1),x)==0.
[R,C] = size(A);
S = R + floor(R/x);
Anew = nan(S,C);
idx1 = true(S,1);
idx1(x+1:(x+1):S) = false;
Anew(idx1,:) = A;
```
Azzi Abdelmalek on 5 Aug 2012

i like this one

Answer by Azzi Abdelmalek on 5 Aug 2012
Edited by Walter Roberson on 5 Aug 2012
```% this code is for test the example
```
` B=reshape(A,5,2,3);B(6,:,:)=nan;result= reshape(B,18,2)`
```% this code is for your real data
```
` B=reshape(A,5,7,1400);B(6,:,:)=nan;result= reshape(B,8400,7)`
```% note that 1400 = 7000/5; and 8400=(5+1)*1400
```

## 1 Comment

antonet on 5 Aug 2012

thank you both!