Alternation without for loop

조회 수: 2 (최근 30일)
JamJan
JamJan 2019년 10월 15일
댓글: J. Alex Lee 2019년 10월 15일
I have 2 vectors that I want to alternate
A = [1 2 3 4 5 6 7 8 9 10]
B = [0.5 0.2 0.4 0.8 0.9]
I would like to have the following output (preferably without for loop)
Output = [1 0.5 2 0.2 3 0.4 4 0.8 5 0.9 6 7 8 9 10]
How to do this?
Thanks!

답변 (3개)

Stephen23
Stephen23 2019년 10월 15일
편집: Stephen23 2019년 10월 15일
>> N = min(numel(A),numel(B));
>> V = [reshape([A(1:N);B(1:N)],1,[]),A(N+1:end),B(N+1:end)]
V =
1 0.5 2 0.2 3 0.4 4 0.8 5 0.9 6 7 8 9 10
  댓글 수: 1
J. Alex Lee
J. Alex Lee 2019년 10월 15일
nice...i like when i didn't see the obvious complete opposite path...and i learned a new thing with the empty argument for reshape

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


Jos (10584)
Jos (10584) 2019년 10월 15일
% a sorting trick
A = [1 2 3 4 5 6 7 8 9 10]
B = [0.5 0.2 0.4 0.8 0.9]
C = [A B] ;
[~,ix] = sort([1:numel(A) 1:numel(B)])
C = C(ix)

J. Alex Lee
J. Alex Lee 2019년 10월 15일
Here's a possibility: if A and B were guaranteed to be the same length (your example is not) and row vectors, you could do
N = length(A)
Output = reshape([A(:),B(:)]',2*N,1)
If not same length, you can nan-pad the shorter vector and remove later.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by