Как я могу сохранить все мои произведенные перестановки в массив Numpy? - PullRequest
2 голосов
/ 20 сентября 2019

Я хотел бы сгенерировать и сохранить все полученные перестановки, полученные с помощью itertools.product (), в массив.В данный момент я пытаюсь получить все перестановки длины 2 символов «ACGT».Когда я пытаюсь использовать numpy.asarray (), сохраняется только окончательная перестановка (['T', 'T']), что, как я полагаю, происходит потому, что запись переопределяется каждый раз в массиве.Я попробовал следующее:

import itertools as it
import numpy as np

for x in it.product('ACGT', repeat=2):
    array = np.asarray(x)

print(array)
['T', 'T']

Позже я хочу сделать это для больших длин слова, но проще проверить, когда я ожидаю только 16 результатов.Если бы я использовал R, я бы создал пустой вектор и последовательно добавил к вектору ... Однако я все еще пытаюсь освоить Python ... Пожалуйста, сообщите!

1 Ответ

2 голосов
/ 20 сентября 2019

Причина, по которой это не работает, заключается в том, что для каждого результата it.product(..) вы создаете массив для , который результата.Не для всего результата.

Вы можете создать такую ​​матрицу с помощью:

np.array(<b>list(</b>it.product('ACGT', repeat=2)<b>)</b>)

или с помощью meshgrid:

dna = np.array(list('ACGT'))
np.transpose(<b>np.meshgrid(</b>dna, dna<b>)</b>).reshape(-1,2)

Оба производят массив, который выглядит как:

array([['A', 'A'],
       ['A', 'C'],
       ['A', 'G'],
       ['A', 'T'],
       ['C', 'A'],
       ['C', 'C'],
       ['C', 'G'],
       ['C', 'T'],
       ['G', 'A'],
       ['G', 'C'],
       ['G', 'G'],
       ['G', 'T'],
       ['T', 'A'],
       ['T', 'C'],
       ['T', 'G'],
       ['T', 'T']], dtype='<U1')
...