Я пытаюсь выяснить способ сделать определенное «сокращение» У меня есть изменяющейся числа матриц различных размера, напримерОбъединение каждого столбец-комбинация произвольного числа матриц
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 ... сп, что мне нужно являются столбцы [a1 b1 c1 ], [a1, b1, c2], ..., [a1 b1 сп] ... [ап млрд сп]
Решение Предоставлено 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, и рекурсивно заполнял A все большим количеством элементов. Спасибо за ваши проблемы! – isebarn
Рад, что он работает :) Обновлено с кратким решением «tl; dr» наверху независимо. Надеюсь, это добавит что-то полезное тоже :) –
Спасибо, я ценю усилия! – isebarn