我试图想出一个办法做了一定的“减量化” 我有一个不同数矩阵不同大小,例如结合矩阵任意数量的每一列组合
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