gpt4 book ai didi

Python 位数组反向补码

转载 作者:行者123 更新时间:2023-11-28 17:34:09 27 4
gpt4 key购买 nike

我正在使用 Python 的 bitarray 模块 将二进制文件中写入的 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)

关于如何加快此过程的任何提示?

最佳答案

您提供的代码没有给出您指定的答案。

这是给出正确答案的代码。也许它也足够快:

def reverse_complement(my_bitarray):
# First reverse by twos
my_bitarray = zip(my_bitarray[0::2], my_bitarray[1::2])
my_bitarray = reversed(list(my_bitarray))
my_bitarray = (i for t in my_bitarray for i in t)
my_bitarray = bitarray(my_bitarray)

# Then complement
my_bitarray.invert()
return my_bitarray

请注意,您不必担心填充。 bitarray.bitarray() 为您管理所有这些。

关于Python 位数组反向补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32072411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com