這裏是我有的問題的簡化版本。假設我有一個矢量MATLAB中的笛卡爾乘積
P = [1 5 10]
和另一個
Q = [75 0.85 0.95]。
並且我想要想出以下矩陣:
RES = [1,0.75; 1,0.85; 1,.95; 5,.75; 5,.85; 5,.95; 10,.75; 10,.85; 10,.95]。
這也被稱爲笛卡兒積。 我該怎麼做?
非常感謝
這裏是我有的問題的簡化版本。假設我有一個矢量MATLAB中的笛卡爾乘積
P = [1 5 10]
和另一個
Q = [75 0.85 0.95]。
並且我想要想出以下矩陣:
RES = [1,0.75; 1,0.85; 1,.95; 5,.75; 5,.85; 5,.95; 10,.75; 10,.85; 10,.95]。
這也被稱爲笛卡兒積。 我該怎麼做?
非常感謝
這裏有一種方法:
[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
雖然這確實是笛卡爾乘積,但它不是OP要求的。這需要一個「結果=總和(結果,2)」的附加步驟來限定。 – jpjacobs 2012-03-23 10:09:30
我不認爲這是真的。如果仔細觀察,OP問題中的結果矩陣似乎是2×9,而不是1×9。第一行是「1,0.75」(注意「1.75」中的空格),而不是1.75。鏈接的FileExchange腳本進一步證實了這一點,他說這確實是正確的。我同意這令人困惑 - 我不得不眯眼看看發生了什麼事情! – nibot 2012-03-23 10:14:31
你完全正確的那個。爲了清楚起見,我會糾正他的帖子。 – jpjacobs 2012-03-23 10:18:17
類似的方法,通過@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
其實,我發現http://www.mathworks.com/matlabcentral/fileexchange/5898這件事情不正是我想要的是! – emper 2012-03-23 04:54:03
您應該將其作爲答案並接受您自己的答案來解決問題。 – learnvst 2012-03-23 05:48:27
相似的問題:[Matlab - 生成一些向量的元素的所有可能的組合](http://stackoverflow.com/q/4165859/97160) – Amro 2012-07-26 01:39:29