在我的项目中,我需要对数百万个DNA序列进行约100次(总计数十亿次相似序列)的OneHotEncode,因此有效的方法对我来说非常重要。
bsp是我的代码,它需要4.5s的10K序列。
import numpy as np
import os,sys,time
def dna2onehot(dnaSeq):
seqLen = len(dnaSeq)
dnaSeq = dnaSeq.upper()
# initialize the matrix to seqlen x 4
seqMatrix = np.zeros((seqLen,4))
# change the value to matrix
for i in range(0,seqLen):
if dnaSeq[i] == 'A':
seqMatrix[i,0] = 1
if dnaSeq[i] == 'C':
seqMatrix[i,1] = 1
if dnaSeq[i] == 'G':
seqMatrix[i,2] = 1
if dnaSeq[i] == 'T':
seqMatrix[i,3] = 1
ret = np.array(seqMatrix.flat)
return ret
#
sequence = "TCTGAGTCCCAATACACAAGAGGTTCCCTCACCTGTTCTGGTGTCAGACCCTCCCAGATGATCACCTCTCCTATGGCGGGGAAGGTGCCTGGATGTCTAAAGCCTGAAATGGGGATCTATCCCAGAAGCTGTGTAGCTTCTGCCTGTCCCAGAAGCTGTGTTGTTTCTGTATTCAGCTTGCTCACCCTCCGCAGTCCATTGATCTGCACAGACTGTTCTCAGATGGACTCGTGAGACAAGATGGCTCCTTCACCTGCTCTGGGGATCAGAACCCTCCCAGGTGGCCACCTCTCCTGTGGTGGGGAAGGTACCTGGAAGTCTTCAGCCCAAAACAGGGCCTGTCCCAGAAGCTGTGTCTCTTCTGCCTATCCCAGAAGCTGTATTGCTTCTGCTGTCCACTTGCTCACCCTCTGCAGTCTGCATGCTGATCTGCGCAGACTGTTCTCAGAGGGATCTGGCAGACAAGTTGGCTCCCTCACCTGCTCTGGGGCGGGGGGGGGGGGTTCAGAGCCCTCCTGGGCAGCCACCTCTCCTCTAGCAGAGAAGGTGCTGGGATGTCTTGAGCAGGAAACGGGGTATGTCCCAGAAGCTGTCTTGCTTCTGCAATCCACATGCTCAGCCTCTGCAGTCTGTGAGCTAATCTGGGCAGTCTGGTCTCAGGGGACTCTGGAGACAAGATGGCTCCCTCACCTGCTCTGGGGGTCAAAGCCCTCCTTGGCAGCCACCTTTTTCAGGCGGAGAAGGTGCCCGGATGTCTGGAGCCTGAAACAGGGGTATGTCCCAGACACTGTGTAGCTTCTGCCTGCCCCAGAAGATGTGTCACTTCCTCAGTCTGCTTGTTCACCCTCCACAGTCTGCAAGCTGATCTGCACAGACTGGTCTCAGAGGGACCTAGAAGACAAGATCAAGAAAAGTCTTATAGGTATAATGAATCAAGCAGAAAATGAAACATCAGAAGCTTAAGATAAAATACAGGATCTAGTCCAAATTAGCAAGAAGTA"
count = 10000
datalist = []
t1 = time.time()
for k in range(count):
datalist.append(dna2onehot(sequence))
#
t2 = time.time()
print("time cost:",t2-t1)
字符串
你有什么建议来减少使用python的时间(我的整个项目都是基于python的)?
2条答案
按热度按时间fhg3lkii1#
你可以使用scikit-learn中的
OneHotEncoder
。字符串
您可以通过查看以下内容来查看哪些字母对应于哪些列:
型
所以在这种情况下,它们是按字母顺序排列的。
zf9nrax12#
这里有一个更快(更简单)的方法:
字符串