我試圖想出一個辦法做了一定的「減量化」 我有一個不同數矩陣不同大小,例如結合矩陣任意數量的每一列組合
1 2 2 2 5 6...70 70
3 7 8 9 7 7...88 89
1 3 4
2 7 7
3 8 8
9 9 9
.
.
44 49 49 49 49 49 49
50 50 50 50 50 50 50
87 87 88 89 90 91 92
我需要做的(我希望我解釋這顯然不夠)是組合從這些矩陣列的任何可能的組合 ,這意味着一列可能是
1
3
1
2
3
9
.
.
.
44
50
87
這將降低減少
1
2
3
9
.
.
.
44
50
87
爲什麼我這樣做的原因是因爲我需要找到最小的唯一合併塔
什麼我試圖完成
對於那些感興趣的,我試圖找到最小的一組基因敲除 禁用反應。在這裏,每個矩陣代表一個反應,而列代表將禁止該反應的基因的指數。
的方法可以是如蠻力根據需要,因爲這些矩陣很少變成壓倒性大, 並將反應組合不會很長或者
問題
我不能t(據我所知)用任意數量的迭代器創建一個for循環,並且矩陣的數目(禁用的反應)是任意的。
澄清
如果我有矩陣A,B,C與列A1,A2 ...... B1,B2 ...... C1 ... CN什麼,我需要 是列[A1 B1 C1 ],[A1,B1,C2],...,[A1 B1 CN] ... [一個BN CN]
解 禮貌的下面Michael Ohlrogge。
擴展他的回答中,出於完整性
他的解決方案與
MyProd = product(Array_of_ColGroups...)
哪幹得不錯
並拿起他離開的地方
collection = collect(MyProd); #MyProd is an iterator
merged_cols = Array[] # the rows of 'collection' are arrays of arrays
for (i,v) in enumerate(collection)
# I apologize for this line
push!(merged_cols, sort!(unique(vcat(v...))))
end
# find all lengths so I can find which is the minimum
lengths = map(x -> length(x), merged_cols);
loc_of_shortest = find(broadcast((x,y) -> length(x) == y, merged_cols,minimum(lengths)))
best_gene_combos = merged_cols[loc_of_shortest]
精美的作品!我迭代了一個包含B..N的數組數組,並遞歸地填充了越來越多的元素。感謝您的麻煩! – isebarn
很喜歡它的工作原理:) 無論是在頂部簡潔的「tl; dr」解決方案更新。希望這會增加一些有用的東西:) –
謝謝,我欣賞努力! – isebarn