我想用Python中的位編碼編碼核苷酸「A」,「G」,「C」和「T」。例如:Python:使用位。用零和1編碼核苷酸
'A' = 00
'G' = 01
'C' = 10
'T' = 11
爲了構建一個包含k聚體巨大的字典,如:
dic = { 'ATGACTGACT':231, 'AAATGACGGAC':500 ... }
我認爲這可能減少,因爲「ATGC」由字典所需要的內存量將需要4字節,但同一個字將需要8位和一位編碼。
我不知道這是可以做到,如果是這樣,它使用Python
在此先感謝我怎麼會呢!
編輯:對不起,我沒有解釋自己的權利。
我想要的是步行穿過由ATGC組成的序列,其大小爲k的滑動窗口,並計算每個k聚體在該序列中出現的次數。例如:
'ATGAATGAA' # with a sliding window of 5 would be
dic = { 'ATGAA':2, 'TGAAT':1, 'GAATG':1, 'AATGA':1, }
因爲我想與「聯合運輸線協定」的所有可能組合來構建字典大小k開始前閱讀的順序,以訪問字典與每個k-mer的關鍵並總結1的價值,我想知道是否有可能k-mers在該字典存儲位編碼。或多或少:
dic = {1011001010: 3, 0000110011: 666, ... etc }
目前我正在用itertools構建該詞典。
# k-mers of size 8
{''.join(x):0 for x in itertools.product('ATGC', repeat=8)}
我想另一個問題將是每個k-mer的需要,以訪問字典
現在還不清楚:在你的dic例子中,你仍然有完整的k-mer版本,那麼在哪裏減少內存?另一個重要的問題是,在這之後你打算怎麼做?部分搜索?使用指標? – pmod 2015-01-09 22:03:48
'00001100'會編碼什麼? AAT? TA? AATA? – 2015-01-09 22:08:43
對於可變長度字符串,您可以使用像[bitstring](https://pythonhosted.org/bitstring/index.html)(特別是ConstBitStream用作字典鍵)的模塊。我不知道這將如何影響性能/內存使用。順便說一句,你可以[過早優化](http://ubiquity.acm.org/article.cfm?id=1513451)?我不是說你是;問題是,恆定的4倍內存改進是否值得額外的複雜性,並且現在應該做出改變? – Lack 2015-01-09 22:31:19