1. 程式人生 > >一個matlab裡的排列組合或者說是迴圈巢狀的層數不定的問題

一個matlab裡的排列組合或者說是迴圈巢狀的層數不定的問題

我要完成類似這麼一個工作:我有一個n維的座標,[a,b,c....n]座標的範圍已知,如何將所有的座標都填到一個矩陣裡去,舉例說明,假設有[a,b,c]取值在[3,3,3]到[4,4,4]之間,那麼應該這之間的所有座標為444,344,434,443,334,343,433,333也就是2*2*2個,這是一個排列組合的問題,可是我試了用perms好像無法實現我的要求,而如果用迴圈巢狀的方式,因為n是不定的,那麼巢狀的層數不定,也不知道如何解決,請問哪位大神能給我一個解決方案?萬分感謝!

基本思路

1、使用ndgrid生成N維網格資料;
2、把網格資料轉換為座標組合。

參考程式碼

1

2

3

4

5

6

7

8

9

10

11

12

% 把每維的座標寫成向量,然後放在一個cell陣列中

% 這裡按照你給的例子示範(三個座標)

C = { 3:4 3:4 3:4 };

% 使用ndgrid生成N維網格資料

n = length(C);

S=arrayfun(@(i)sprintf('x%i ',i),1:n,'UniformOutput',false);

eval(['[' S{:} ']=ndgrid(C{:});'

])

S1=arrayfun(@(i)sprintf('x%i(:) ',i),1:n,'UniformOutput',false);

% 把網格資料轉換為座標組合

X=eval(['[' S1{:} ']'])

執行結果

1

2

3

4

5

6

7

8

9

X =

3     3     3

4     3     3

3     4     3

4     4     3

3     3     4

4

     3     4

3     4     4

4     4     4