これが私が抱えている問題の簡略版です。私がベクトルを持っているとしましょう
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]。
これは、デカルト積としても知られています。どうやってやるの?
どうもありがとう
これが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
@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