MATLAB Answers

0

Interweave two arrays in a specific pattern

Asked by Adam Fitchett on 30 Oct 2019
Latest activity Commented on by Daniel M
on 30 Oct 2019
I have two column vectors each of which is 160 rows long. I want to interweave them such that the first 16 rows of vector 2 are underneath the first 16 rows of vector 1, the second 16 rows of vector 2 are underneath the original second 16 rows of vector 1 and so on. E.g. the vectors are interweaved in alternating blocks of 16. Is there a simple way to do this?

  0 Comments

Sign in to comment.

Products


Release

R2017b

2 Answers

Answer by Fangjun Jiang
on 30 Oct 2019
Edited by Fangjun Jiang
on 30 Oct 2019

%%
a=(1:32)';
b=(10:10:320)';
%%
c=reshape([a,b],16,[]);
d=c(:,[1:2:end,2:2:end]);
e=d(:)
%% better solution from Guillaume
c=[reshape(a,16,[]);reshape(b,16,[])];
e=c(:)

  2 Comments

May be simpler:
reshape([reshape(a, 16, []); reshape(b, 16, [])], [], 1) %reshape a and b separately into columns of 16 rows. Vertically concatenate the two and reshape back into vector
Apparently, it is better! Thanks!

Sign in to comment.


Answer by Daniel M
on 30 Oct 2019
Edited by Daniel M
on 30 Oct 2019

x = [1:160]';
y = x;
xx = reshape(x,16,[])';
yy = reshape(y,16,[])';
zz = [xx,yy]';
z = zz(:);

  2 Comments

None of the (conjugate!) tranpose are necessary. Simply use zz = [xx; yy]
details....details...
% edited:
% your starting point, x and y are two column vectors
x = [1:160]';
y = x
%
xx = reshape(x,16,[]); % put into matrix of 16 rows, N columns
yy = reshape(y,16,[]);
zz = [xx,yy]; % vertically concatenate
z = zz(:); % column vector again
Note: the two answers are now identical.

Sign in to comment.