Interweave two arrays in a specific pattern

조회 수: 4 (최근 30일)
Adam Fitchett
Adam Fitchett 2019년 10월 30일
댓글: Daniel M 2019년 10월 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
Fangjun Jiang
Fangjun Jiang 2019년 10월 30일
Apparently, it is better! Thanks!

댓글을 달려면 로그인하십시오.


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에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

제품


릴리스

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by