Produto cartesiano em MATLAB
Aqui está a versão simplificada do problema que tenho. Suponha que eu tenho um vector
=[1 5 10]
e outro
Q=[.75 .85 .95].
e quero criar a seguinte matriz:
Este também é conhecido como o produto cartesiano. Como posso fazer isso? Muito obrigado.Res=[1, .75;1, .85; 1, .95; 5, .75; 5, .85; 5, .95; 10, .75; 10, .85; 10, .95].
13
2 answers
Aqui está uma maneira:
[X,Y] = meshgrid(p,q);
result = [X(:) Y(:)];
A saída é:
result =
1.0000 0.7500
1.0000 0.8500
1.0000 0.9500
5.0000 0.7500
5.0000 0.8500
5.0000 0.9500
10.0000 0.7500
10.0000 0.8500
10.0000 0.9500
39
Author: nibot, 2012-03-23 09:11:08
Uma abordagem semelhante à descrita por @nibot pode ser encontrada em matlab central file-exchange .
Generaliza a solução a qualquer número de conjuntos de entrada. Esta seria uma versão simplificada do Código:
function C = cartesian(varargin)
args = varargin;
n = nargin;
[F{1:n}] = ndgrid(args{:});
for i=n:-1:1
G(:,i) = F{i}(:);
end
C = unique(G , 'rows');
end
Por exemplo:
cartesian(['c','d','e'],[1,2],[50,70])
ans =
99 1 50
99 1 70
99 2 50
99 2 70
100 1 50
100 1 70
100 2 50
100 2 70
101 1 50
101 1 70
101 2 50
101 2 70
2
Author: jruizaranguren, 2015-10-22 14:26:27