Interweave two arrays in a specific pattern

9 次查看(过去 30 天)
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?

回答(2 个)

Fangjun Jiang
Fangjun Jiang 2019-10-30
编辑:Fangjun Jiang 2019-10-30
%%
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 个评论
Guillaume
Guillaume 2019-10-30
编辑:Guillaume 2019-10-30
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

请先登录,再进行评论。


Daniel M
Daniel M 2019-10-30
编辑:Daniel M 2019-10-30
x = [1:160]';
y = x;
xx = reshape(x,16,[])';
yy = reshape(y,16,[])';
zz = [xx,yy]';
z = zz(:);
  2 个评论
Guillaume
Guillaume 2019-10-30
编辑:Guillaume 2019-10-30
None of the (conjugate!) tranpose are necessary. Simply use zz = [xx; yy]
Daniel M
Daniel M 2019-10-30
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.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by