Interleaving arrays with different sizes

2 Ansichten (letzte 30 Tage)
Matt Holm
Matt Holm am 13 Nov. 2016
Beantwortet: Jos (10584) am 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 Kommentare
Walter Roberson
Walter Roberson am 13 Nov. 2016
How would you know how to de-interleave them afterwards?
Matt Holm
Matt Holm am 13 Nov. 2016
Im not sure how to de-interleave them aha

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Marco Morganti
Marco Morganti am 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) am 5 Jan. 2017
x = 1:5
y = 10:10:30
xy = [x y]
[~, si] = sort([1:numel(x) 1:numel(y)])
result = xy(si)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by