Python numpy可以加速字符和子字符串计数吗?

Python numpy可以加速字符和子字符串计数吗?,python,numpy,substring,Python,Numpy,Substring,这里有人试图使用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('te

这里有人试图使用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):

我使用这段代码来计算65GB文件中的子字符串。 要花很多小时才能完成。所以我想用numpy来加快速度。在函数中使用一些biult来尝试改进一点。

初始化numpy阵列不是最快的操作,而且似乎不需要任何特定于numpy的工具;我建议只将字符串本身传递给
计数器

In [193]: strings = ['awerawe', 'awerawer', '23432wefeaf', 'awefpi32']
     ...: Counter(strings)
Out[193]: Counter({'awerawe': 1, 'awerawer': 1, '23432wefeaf': 1, 'awefpi32': 1})
[192]中的
:字符串=['awerawe','awerawer','23432wefeaf','awefpi32']
…:sum(映射(计数器,字符串),start=Counter())
出[192]:
计数器({'a':6,
“w”:6,
"e":7,,
“r”:3,
'2': 3,
'3': 3,
'4': 1,
“f”:3,
"p":1,,
“i”:1})
相反,如果您想计算字数,只需将
字符串
传递到
计数器

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

如果您需要加速更通用的代码(也就是不可矢量化的代码),可以尝试numba。性能何时会出现问题?有什么方法可以改进程序的设计吗?你到底为什么在这里使用numpy.ndarray?这几乎肯定会减慢你的解决方案。我只是想在函数中寻找一些双峰来加速计数或其他什么。这不是真正的代码。我想用一些类似于numpy.char.count()的函数来代替计数器,但它不能满足我的需要。因此,如果您有一些建议,我们将不胜感激。
numpy
没有处理字符串的快速编译代码。这在某种程度上取决于Python字符串方法。我编辑了我的第一篇文章。8)