Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Interweaving vectors

Tags:

vector

matlab

I would like to interweave two vectors in MATLAB. In fact, I'd actually just like to add a zero between each element, but I figured I'd ask the question in such a way that I'd learn how to apply this to other situations.

My specific application: I'd like to take a vector (e.g. [1 2 3]) and output [0 1 0 2 0 3].

The wider question: How would I do this with two different vectors, e.g. [1 2 3] and [9 8 7] interweaving to produce [9 1 8 2 7 3].

Any help greatly appreciated, in either or both of the above questions.

like image 827
CaptainProg Avatar asked Apr 25 '12 13:04

CaptainProg


2 Answers

I'd make use of the internal layout of MATLAB vectors: They are stored column-major, that is, values in a column change fastest. To interleave two vectors a and b, simply do:

ar = a(:).';    % make sure ar is a row vector
br = b(:).';    % make sure br is a row vector
A = [ar;br];   % concatenate them vertically
c = A(:);      % flatten the result
like image 174
marton78 Avatar answered Oct 01 '22 21:10

marton78


Try

reshape([[9 8 7];[1 2 3]],1,[])
like image 25
High Performance Mark Avatar answered Oct 01 '22 23:10

High Performance Mark