【发布时间】:2020-03-05 12:09:05
【问题描述】:
在我的项目中,我需要为数百万个 DNA 序列制作 oneHotEncode 约 100 次(总共数十亿次相似序列)。所以一个有效的方法对我来说非常重要。
下面是我的代码,10K 序列需要 4.5 秒。
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的)?
【问题讨论】:
标签: python python-3.x one-hot-encoding