MATLAB Answers

How can I mix two arrays?

Given A=[1 3 5 7 9] and B=[2 4 6 8], how can I create C=[1 2 3 4 5 6 7 8 9]?

  댓글 수: 0

로그인 to comment.

답변 수: 2

Youssef Khmou 님의 답변 15 Jan 2015
Youssef Khmou 님이 편집함. 15 Jan 2015
 채택된 답변

This question is general due to the variation of array dimensions, however for a particular case you described, vectors A and B can be mixed by single loop, so the following scheme is valid only when dim(A)=dim(B)+1 as in the example :
A=[1 3 5 7 9];
B=[2 4 6 8];
n=min(length(A),length(B));
C=[];
for t=1:n
C=[C A(t) B(t)];
end
C=[C A(end)];

  댓글 수: 3

That's it, thank you very much
This answer is very poor use of MATLAB.
The use of a for loop and concatenating scalar values onto the end of with every iteration is poor coding practice in MATLAB. If the arrays are large, then this will be slow as MATLAB keeps expanding the array and copying it to new memory. One solution is to preallocate the array.
For a much neater and simpler solution see my answer below.

로그인 to comment.


Stephen Cobeldick 님의 답변 15 Jan 2015
Stephen Cobeldick 님이 편집함. 16 Jan 2015

This can be done simply using indexing, without any loops:
>> A = [1,3,5,7,9];
>> B = [2,4,6,8];
>> C(1:2:2*numel(A)) = A;
>> C(2:2:end) = B
C =
1 2 3 4 5 6 7 8 9
This solution also assumes that numel(A)==numel(B)+1.
Most importantly, for larger arrays this code will be much faster than the accepted solution, so it is the most universal solution.

  댓글 수: 0

로그인 to comment.



Translated by