Combinations of different size columns (arrays)

3 visualizaciones (últimos 30 días)
Ahsan Khan
Ahsan Khan el 14 de Sept. de 2012
Hi Matlabers,
How can I get the combination of two columns with different sizes? ex: Column one [1;2;3;4;5] Column two [4;5;6;7;8;9;10]
output:
1 4
1 5
1 6
...
5 4
5 6
5 7
5 8
5 9
5 10
Notice the repeating num don't count (5 and 5). thanx in advance

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 14 de Sept. de 2012
Editada: Andrei Bobrov el 17 de Sept. de 2012
a = (1:5)';
b = (4:10)';
[i2,i1] = ndgrid(b,a);
out0 = [i1(:),i2(:)];
out = out0(abs(diff(out0,1,2)) > eps(100),:);
or
a = (1:5)';
b = (4:10)';
idx = fullfact([numel(b),numel(a)])
out0 = [a(idx(:,2)),b(idx(:,1))]
out = out0(abs(diff(out0,1,2)) > eps(100),:);
EDIT
a = (1:5)';
b = (4:10)';
c = [15 17 18]';
d = [20 21 22]';
data = {a,b,c,d};
k = cellfun(@numel,data);
idx = fliplr(fullfact(fliplr(k)));
t = cumsum(k);
idx2 = bsxfun(@plus,idx, [0 t(1:end-1)]);
d2 = cat(1,data{:});
out0 = d2(idx2);
out = out0(any(abs(diff(out0,1,2)) > eps(100),2),:);
  2 comentarios
Ahsan Khan
Ahsan Khan el 14 de Sept. de 2012
how will this work with more than two arrays. when I add two more arrays (c and d) the output is:
c = [15 17 18];
d = [20 21 22];
[i4,i3,i2,i1,] = ndgrid(d,c,b,a);
out0 = [i1(:),i2(:),i3(:),i4(:)];
out = out0(abs(diff(out0,1,4)) > eps(100),:)
I get: out = Empty matrix: 0-by-4 or maybe I didn't understand the diff function
Andrei Bobrov
Andrei Bobrov el 17 de Sept. de 2012
see EDIT

Iniciar sesión para comentar.

Más respuestas (1)

Azzi Abdelmalek
Azzi Abdelmalek el 14 de Sept. de 2012
x=[4;5;6;7;8;9;10]
n=length(x);
y=repmat(1:9,n);y1=y(:)
x1=repmat(x,n*9,1)
v=[y1 x1]
v(x1-y1==0,:)=[]

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by