擅长:python、mysql、java
<p>您可以将kmer转换为二进制,但是正如Ignacio指出的那样,您仍然需要知道它们的长度,所以您可能还需要存储这些数据。所以,对于很长的序列,这仍然可以节省内存空间。在</p>
<p>下面是一些示例代码,它获取序列,对它们进行编码并再次解码:</p>
<pre><code>encoding_map = {'A': 0, 'G': 1, 'C': 2, 'T': 3}
decoding_lst = ['A', 'G', 'C', 'T']
def encode(k):
code = 0
for ch in k:
code *= 4
code += encoding_map[ch]
return code, len(k)
def decode(enc):
code, length = enc
ret = ''
for _ in range(length):
index = code & 3
code >>= 2
ret = decoding_lst[index] + ret
return ret
kmers = ['ATGACTGACT', 'ATGC', 'AATGC']
kmerdict = {k: encode(k) for k in kmers}
print(kmerdict)
for key, enc in kmerdict.items():
print(enc, decode(enc))
</code></pre>
<p>典型输出:</p>
^{pr2}$
<p>顺便说一句,不管序列有多长,Python应该能够处理编码和解码,因为整数可以扩展到足以容纳数字的位。在</p>