emp*_*per 16 matlab matrix cartesian-product
这是我遇到的问题的简化版本.假设我有一个向量
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].
这也称为笛卡尔积.我怎样才能做到这一点?
非常感谢
nib*_*bot 43
这是一种方式:
[X,Y] = meshgrid(p,q);
result = [X(:) Y(:)];
Run Code Online (Sandbox Code Playgroud)
输出是:
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
Run Code Online (Sandbox Code Playgroud)
与 @nibot 描述的方法类似的方法可以在matlabcentral 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
Run Code Online (Sandbox Code Playgroud)
例如:
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
Run Code Online (Sandbox Code Playgroud)