嗨,我正在尝试传递 count_kmers 函数:
def get_kmers_from_sequence(sequence, min_k, max_k):
"""
Generate all DNA k-mers over the entirety of a sequence.
Inputs:
sequence - string where all kmers will be checked
min_k: minimum DNA kmer length (int)
max_k: maximum DNA kmer length (int)
Output:
yields all DNA kmers (str) of length min_k to max_k
"""
limits = range(min_k, max_k + 1)
for i in range(0, len(sequence) - max_k + 1):
for j in limits:
yield sequence[i:i+j]
def count_kmers(sequence, alphabet, min_k, max_k):
counts = defaultdict(int)
for kmer in get_kmers_from_sequence(sequence, min_k, max_k):
if set(kmer).issubset(alphabet):
counts[kmer] = counts.get(kmer, 0) + 1
return counts
并行和延迟,但我做得不好。这个函数需要一个fasta文件列表(例如波纹管):
>seq
'ACGTACGGGAATACCACAC'
并计算 k-mers/n-grams/k-tuples,其中 k 是序列的长度。
count_kmers(s, 'ACGT', 2, 2)
defaultdict(int,
{'AC': 5,
'CG': 2,
'GT': 1,
'TA': 2,
'GG': 2,
'GA': 1,
'AA': 1,
'AT': 1,
'CC': 1,
'CA': 2})
我想加快计数和工作速度,因为我有很多文件,而且有些文件可能很大。
任何可以帮助我的提示,我真的很感激。 感谢您抽出宝贵时间。
保罗