Interweave two arrays in a specific pattern

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?

Réponses (2)

Fangjun Jiang
Fangjun Jiang le 30 Oct 2019
Modifié(e) : Fangjun Jiang le 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 commentaires

Guillaume
Guillaume le 30 Oct 2019
Modifié(e) : Guillaume le 30 Oct 2019
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
Fangjun Jiang
Fangjun Jiang le 30 Oct 2019
Apparently, it is better! Thanks!

Connectez-vous pour commenter.

Daniel M
Daniel M le 30 Oct 2019
Modifié(e) : Daniel M le 30 Oct 2019
x = [1:160]';
y = x;
xx = reshape(x,16,[])';
yy = reshape(y,16,[])';
zz = [xx,yy]';
z = zz(:);

2 commentaires

Guillaume
Guillaume le 30 Oct 2019
Modifié(e) : Guillaume le 30 Oct 2019
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.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Language Fundamentals dans Centre d'aide et File Exchange

Produits

Version

R2017b

Commenté :

le 30 Oct 2019

Community Treasure Hunt

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

Start Hunting!

Translated by