[問題] 如何排列組合所有組合

作者: protien (protien)   2014-07-12 00:03:34
大家好,想跟各位請教一下一個排列組合的問題的寫法。
以下是最近想處理的一個問題:
有一組4維的陣列,每一個維度有 100 個 element
{{1,2,3,...100},{1,2,3,...100},{1,2,3,...100},{1,2,3,...100}}
現在想要在每一個維度中隨機抽樣並放進一個新的陣列 {w,x,y,z},例如:
{1,1,1,1}, {1,1,1,2},......{1,1,1,100}, or {2,1,1,100}
數字可以相同,現在想用mathematica 把所有的組合全部列出來。
個人有在help那邊找到一個指令可以做類似的事情 Tuples
例如:
In: Tuples[{{a, b}, {1, 2, 3, 4}, {x}}]
out:
{{a, 1, x}, {a, 2, x}, {a, 3, x}, {a, 4, x}, {b, 1, x}, {b, 2, x},
{b, 3, x}, {b, 4, x}}
但是由於我的問題利用這個方法需要的記憶體的量太大了,跑到一半軟體就罷工了 囧
所以想請教一下大家有甚麼方法或者另外的寫法可以解決這件事?
作者: LPH66 (-6.2598534e+18f)   2014-07-12 16:44:00
要看你 {w,x,y,z} 接下來要做什麼如果要對每個 {w,x,y,z} 做事的話, 不如直接 Do像是 Do[..., {w,{1,2,3,...,100}}, {x,{1,2,3,...,100}}]
作者: protien (protien)   2014-07-12 23:30:00
謝謝你的回答 但這邊的我直接用Do去做接下來的問題的時候例如:array裡面的element的相乘 一樣會遇到記憶體爆炸因為軟體會一直Do下去 不會釋放記憶體 除非跑完100^次相乘所以想請教說是否有更好寫法去用在大量的data的處理上
作者: LPH66 (-6.2598534e+18f)   2014-07-13 15:46:00
你可能要詳細說明你的處理是什麼, 這種大量資料處理的東西要對個別處理仔細最佳化, 這不管寫什麼程式語言都一樣呃, 我是指 case by case 的最佳化...

Links booklink

Contact Us: admin [ a t ] ucptt.com