我使用Python的bitarray module将写在二进制文件中的DNA序列转换为它的反向补码。每个核苷酸由两个位表示,格式如下:
A - 00, C - 01, G - 10, T - 11。在
例如,
AGCTACGG (00 10 01 11 00 01 10 10)的反补码是CCGTAGCT (01 01 10 11 00 10 01 11)。
这个序列正好占用16位(2字节),但是长度9的序列需要18位,并且它被填充为占用24位(3字节)。在
目前我使用for循环进行转换,但是这个解决方案非常慢。def reverse_complement( my_bitarray, seq_length ):
for i in range(0, 2 * seq_length - 1, 2):
if my_bitarray[i] == my_bitarray[i + 1]:
if my_bitarray[i] == 0:
my_bitarray[i], my_bitarray[i + 1] = 1, 1
else:
my_bitarray[i], my_bitarray[i + 1] = 0, 0
#padding if the bitarray is not a multiple of 8 bits in length
if seq_length / 4 != int():
my_bitarray.reverse()
my_bitarray.fill()
my_bitarray.reverse()
return my_bitarray
a = bitarray()
a.frombytes(seq[::-1])
b = a[int(seq_start)::] # seq without padding
b.reverse()
reverse_complement(b, seq_length)
关于如何加快这个过程有什么建议吗?在