Clear Filters
Clear Filters

Interleaving arrays with different sizes

1 view (last 30 days)
Matt Holm
Matt Holm on 13 Nov 2016
Answered: Jos (10584) on 5 Jan 2017
So far i have done this, and it works for arrays of the same size:
function output = interleave(x,y)
output(1:2:6)=x;
output(2:2:6)=y;
end
so if x = [[1 2 3] and y= [10 11 12]) the output is [1 10 2 11 3 12]
but how would i alter the function for arrays of differen sizes
i.e. if x= [1 2] and y [-1 -2 -3] the output is [1 -1 2 -2 -3]
  2 Comments
Walter Roberson
Walter Roberson on 13 Nov 2016
How would you know how to de-interleave them afterwards?
Matt Holm
Matt Holm on 13 Nov 2016
Im not sure how to de-interleave them aha

Sign in to comment.

Answers (2)

Marco Morganti
Marco Morganti on 5 Jan 2017
Hi Matt,
hope this still can be helpful:
function output = interleave(x,y)
lx = numel(x);
ly = numel(y);
l = lx + ly;
i = 1;
j = 1;
k = 1;
output = zeros(1,l);
while (i <= l)
if (j <= lx)
output(i) = x(j);
j = j+1;
i = i+1;
end
if (k <= ly)
output(i) = y(k);
k = k+1;
i = i+1;
end
end
This function is of course much longer than the one you suggested, however it should be able to handle more general cases.

Jos (10584)
Jos (10584) on 5 Jan 2017
x = 1:5
y = 10:10:30
xy = [x y]
[~, si] = sort([1:numel(x) 1:numel(y)])
result = xy(si)

Tags

Community Treasure Hunt

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

Start Hunting!