Bir tamsayı dizisini, her bir tamsayı bir ofset ile bir ascii kodu ile temsil edilen bir dize olarak kodlayan bir dosya formatım (fastq formatı) var. Ne yazık ki, ortak kullanımda iki kodlama vardır, biri 33 ofseti ve diğeri ise 64 ofset ile. Ben bir offset diğerine dönüştürmek için genellikle 100-150 uzunluk uzunlukları var.Ascii kodlamasını python'a dönüştür (hızlıca)
def phred64ToStdqual(qualin):
return(''.join([chr(ord(x)-31) for x in qualin]))
Bu sadece iyi çalışır, ancak özellikle hızlı değildir: Ben bu tür bir şey yapmak için ile gelebilir en basit kodudur. 1 milyon dizimde, makinemde yaklaşık 4 saniye sürüyor. Çeviriyi yapmak için birkaç dict kullanmaya gidersem, bunu yaklaşık 2 saniyeye indirebilirim.
ctoi = {}
itoc = {}
for i in xrange(127):
itoc[i]=chr(i)
ctoi[chr(i)]=i
def phred64ToStdqual2(qualin):
return(''.join([itoc[ctoi[x]-31] for x in qualin]))
Körü körüne cython altında çalışırsam, 1 saniyeden kısa bir süre için kapatırım.
C-seviyesinde olduğu gibi, bu sadece int için bir döküm, çıkarma ve daha sonra char için cast. Yazmadım ama sanırım biraz daha hızlı. Bunu bir python veya daha iyi bir cython sürümünde daha iyi kodlamak dahil olmak üzere herhangi bir ipucu, bu oldukça yararlı olacaktır.
sayesinde
Sean urllib.quote için koduna baktığımızda
'() 'listeleri oluşturmak ve atmak yerine jeneratörler kullanmak için. büyük fark, ama biraz yapmalı. – RichieHindle
[] 'yi() ile değiştirerek,() son python – pixelbeat
ile gereksizdir. İyi fikir, ancak dize katılmasının bir listeye ihtiyacı olduğuna inanıyorum, bu yüzden doğrudan çalışmaz diye düşünmüyorum. – seandavi