例如,我有套文字像這樣:1如何在文本集中創建所有字符組合?
柱:
a
b
2列:
l
m
n
3列:
v
w
x
y
而且我想結合他們得到這樣的輸出:
alv
alw
alx
aly
amv
amw
amx
amy
...
這將輸出24個文本組合。如果我只使用前兩列,則會輸出2 * 3 = 6個組合。
我無法弄清楚如何在MATLAB中做到這一點。有什麼建議麼?
例如,我有套文字像這樣:1如何在文本集中創建所有字符組合?
柱:
a
b
2列:
l
m
n
3列:
v
w
x
y
而且我想結合他們得到這樣的輸出:
alv
alw
alx
aly
amv
amw
amx
amy
...
這將輸出24個文本組合。如果我只使用前兩列,則會輸出2 * 3 = 6個組合。
我無法弄清楚如何在MATLAB中做到這一點。有什麼建議麼?
一種解決方案是使用功能NDGRID生成所有指標組合成你的套:
C = {'ab' 'lmn' 'vwxy'}; %# Cell array of text sets
sizeVec = cellfun('prodofsize',C); %# Vector of set sizes
[index3,index2,index1] = ndgrid(1:sizeVec(3),... %# Create all the index
1:sizeVec(2),... %# combinations for
1:sizeVec(1)); %# the sets
combMat = [C{1}(index1(:)); ... %# Index each corresponding cell of C and
C{2}(index2(:)); ... %# concatenate the results into one matrix
C{3}(index3(:))].';
,你應該得到的combMat
如下:
alv
alw
alx
aly
amv
amw
amx
amy
anv
anw
anx
any
blv
blw
blx
bly
bmv
bmw
bmx
bmy
bnv
bnw
bnx
bny
如果你只是想要獲得第1列和第2列的組合,將第一個輸入和輸出參數從調用中移除到NDGRID,並從計算combMat
中移除C{3}(index3(:))
。
如果您不想讓C
成爲字符串的單元數組的單元數組,而不是字符數組的單元數組,您仍然可以使用上面完全相同的代碼。唯一的區別是combMat
將最終成爲字符串的單元數組而不是字符數組。
UPDATE:
我實際上創建了一個廣義的解決方案,可以計算組合爲任意數量的組(或者字符數組或字符串的單元陣列)。你可以在this answer找到closely-related question。爲了再現上述例子中,只需要調用它像這樣:
combMat = allcombs(C{:});
謝謝......現在,怎麼樣,如果我的文字不僅僅是從1個字符的立場,我的意思是,像文本列如下1: 一個 列2: 汽車 球 表 第3列: 玩 坐我還可以使用meshgrid功能嗎? – playcode 2011-04-12 06:23:36
@ user699844:我已更新我的答案以解決您的新示例。 – gnovice 2011-04-12 17:34:23
非常感謝您的幫助。如果我希望輸出不是char,而是作爲單元陣列,我應該怎麼做?由於我使用你的代碼,我只是得到了字符類型。我想要這樣的輸入:[MAT,idx] = meshgrid([PrefixCombination(1:5,1),PrefixCombination(1:5,2)])。我可以使用此代碼嗎? PrefixCombination是列數可以隨相關變量的變化而變化的單元陣列。它們在每個單元格中包含一個單詞幷包含許多單元格。我希望輸出包含與輸入相同數量的列。每列的行數相同。感謝您的幫助。 – playcode 2011-04-13 19:21:25
密切相關:[Matlab的 - 生成一些向量的元素的所有可能組合(http://stackoverflow.com/q/4165859/ 52738),[MATLAB:枚舉任意數量的集合中的所有項目的組合](http://stackoverflow.com/q/6607355/52738),[MATLAB:任意數量的單元陣列的組合](http:///stackoverflow.com/q/8492277/52738)。 – gnovice 2011-12-13 17:35:15