web-dev-qa-db-ja.com

MATLABのデカルト積

これが私が抱えている問題の簡略版です。私がベクトルを持っているとしましょう

p = [1 5 10]

そしてもう一つ

q = [。75.85.95]。

そして、私は次のマトリックスを考え出したい:

res = [1、.75; 1、.85; 1、.95; 5、.75; 5、.85; 5、.95; 10、.75; 10、.85; 10、.95]。

これは、デカルト積としても知られています。どうやってやるの?

どうもありがとう

17
emper

これが1つの方法です:

[X,Y] = meshgrid(p,q);
result = [X(:) Y(:)];

出力は次のとおりです。

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
44
nibot

@nibotで説明されているものと同様のアプローチは、 matlab central file-exchange にあります。

これは、ソリューションを任意の数の入力セットに一般化します。これは、コードの簡略化されたバージョンになります。

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

例えば:

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
3
jruizaranguren