numpy, чтобы ускорить подсчет символов и подстрок? - PullRequest
0 голосов
/ 24 февраля 2020

кто-нибудь здесь пытался использовать numpy для подсчета строковых символов и подстрок? Например:

for string in string_list:
    c = np.array(list(string))
    counter = Counter(c)

Можно считать 1 символ, но для подстрок есть какая-нибудь функция для ускорения работы с большими данными?

Например, у меня есть это:

k = 1
test_1mer = Counter()

for name, seq in parse_multi_fasta_file_compressed_or_not('test/test_random.faa'):
    test_1mer.update(get_kmers(seq, k))

Файл Fasta (test_random.faa):

>header
SGFAVAGBHNAAMMAAM

Я использую этот код для подсчета подстрок в файле размером 65 ГБ. До финиша sh уходит много часов. Поэтому я думаю о numpy, чтобы немного ускорить процесс. С некоторой функциональностью, чтобы попытаться немного улучшить. введите описание ссылки здесь

1 Ответ

0 голосов
/ 24 февраля 2020

Инициализация numpy массивов - не самая быстрая операция, и, похоже, вам не нужны никакие numpy специфичные c инструменты; Я бы порекомендовал просто передать сами строки на Counter:

In [192]: strings = ['awerawe', 'awerawer', '23432wefeaf', 'awefpi32']
     ...: sum(map(Counter, strings), start=Counter())
Out[192]: 
Counter({'a': 6,
         'w': 6,
         'e': 7,
         'r': 3,
         '2': 3,
         '3': 3,
         '4': 1,
         'f': 3,
         'p': 1,
         'i': 1})

Если вместо этого вы захотите считать слова, вы можете просто передать strings на Counter:

In [193]: strings = ['awerawe', 'awerawer', '23432wefeaf', 'awefpi32']
     ...: Counter(strings)
Out[193]: Counter({'awerawe': 1, 'awerawer': 1, '23432wefeaf': 1, 'awefpi32': 1})
...