boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Python和C++求助
相关主题
牛人们来看看这个Dao语言怎么样
2009年12月9号-最新版务声明
SQL check likeness between two large tables (转载)
SQL combine two tables into one table and add a new column
少林寺外,蓝螃蟹向麻油兔挑战: mayoutu,你怎么会有将近4万块钱的炒股钱的
增加赌博种类
天籁之音隆重推出【我永远的童年】六一活动
SQL check likeness between two large tables (转载)
SQL check likeness between two large tables (转载)
SQL check likeness between two large tables
相关话题的讨论汇总
话题: bc话题: 文件话题: seq话题: 序列话题: 55ccf
进入Programming版参与讨论
1 (共1页)
f*****a
发帖数: 156
1
编程水平不行,用Python的readline和C++的getline写的code慢死了,求高效算法。
问题如下:
两个输入文件,文件1是fastq格式,几千万行,每行最多100个字符
(每4行是一个序列的信息,其中的第2行是序列本身):
@SEQ_ID1
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
@SEQ_ID2
AATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
+''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
@SEQ_ID3
TAGGCGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
C''F((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCCAA
...
文件2是两列的文本,1000行:
BC1 GATTT
BC2 TAGGC
....
程序1:对于文件2中每个BC,计算文件1中有多少序列是以该BC的序列开头的。
例如:对于BC1,在文件1中的第4N+2行中有多少是GATTT开头的。
程序2:和程序1有点类似,不过要求是对于文件2中每个BC,
把文件1中以该BC序列开头的所有序列的4行信息写入单独的文件。
例如:对于BC1,在文件1中的第4N+2行中查找所有是GATTT开头的
把每个匹配的4行信息写入文件BC1.txt
第一个匹配写入的是:
@SEQ_ID1
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
w****w
发帖数: 521
2
文件2中第二列长度都是6?
f*****a
发帖数: 156
3
不是的,从6到15不等。
我现在的方法是对文件1循环,每次读4行。同时建立1000个BC#.txt文件,比较每个BC
和读入的第二行,再计数或写入。程序可以运行,不过很慢。

[发表自未名空间手机版 - m.mitbbs.com]

【在 w****w 的大作中提到】
: 文件2中第二列长度都是6?
w****w
发帖数: 521
4
最好把它们都搞成15,这样只要查一次就可以了。
以第二列为key, (count,file)为value建dictionary,然后取seq开始的6,..., 15,查
dictionary。

BC

【在 f*****a 的大作中提到】
: 不是的,从6到15不等。
: 我现在的方法是对文件1循环,每次读4行。同时建立1000个BC#.txt文件,比较每个BC
: 和读入的第二行,再计数或写入。程序可以运行,不过很慢。
:
: [发表自未名空间手机版 - m.mitbbs.com]

f*****a
发帖数: 156
5
不太明白,可否给个python的code? 多谢!

[发表自未名空间手机版 - m.mitbbs.com]

【在 w****w 的大作中提到】
: 最好把它们都搞成15,这样只要查一次就可以了。
: 以第二列为key, (count,file)为value建dictionary,然后取seq开始的6,..., 15,查
: dictionary。
:
: BC

k**********g
发帖数: 989
6
http://stackoverflow.com/questions/843154/fastest-way-to-find-t
As a sidenote,
(1) Make sure your text file is not Unicode, and make sure its end-of-line
marker is consistent. The processing of variable-length Unicode-encoded
character is what prevents the standard library writers from making
optimizations.
(2) If the BC sequences have very short length (such as 5), and the
alphabets allowed in BC sequences are just {C, G, T, A} then the exhaustive
number of possible BC sequences is only 4 to the power of 5 = 1024. Thus
you can build a histogram of all BC sequences (whether they appear in File 2
or not) with length 5 or less.
w****w
发帖数: 521
7
http://webbew.dyx.com/forum/viewtopic.php?f=2&t=8

【在 f*****a 的大作中提到】
: 不太明白,可否给个python的code? 多谢!
:
: [发表自未名空间手机版 - m.mitbbs.com]

m*****n
发帖数: 204
8
If you build a prefix tree out of the BCs first, you'll only need to walk
the tree once to find the match.

BC

【在 f*****a 的大作中提到】
: 不是的,从6到15不等。
: 我现在的方法是对文件1循环,每次读4行。同时建立1000个BC#.txt文件,比较每个BC
: 和读入的第二行,再计数或写入。程序可以运行,不过很慢。
:
: [发表自未名空间手机版 - m.mitbbs.com]

d****n
发帖数: 1637
9
FASTQ file customize deindex?
step1, use klib->kseq to read fastq files. No other lib is faster than this.
step 2, build a hash base on your barcode list, and open 1000 file handlers
as the hash values.
step3. iterate through your fastq files,(using kseq), when a
barcode match a key write it to the value(file hanlder)
I bet you no other solution is faster than this.

【在 f*****a 的大作中提到】
: 编程水平不行,用Python的readline和C++的getline写的code慢死了,求高效算法。
: 问题如下:
: 两个输入文件,文件1是fastq格式,几千万行,每行最多100个字符
: (每4行是一个序列的信息,其中的第2行是序列本身):
: @SEQ_ID1
: GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
: +
: !''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
: @SEQ_ID2
: AATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT

o*******p
发帖数: 27
10
如果长度不等,可以用10 (=15-6+1)个dictionary,每个对应相对的长度:
ds = []
for i in range(10): ds.append({})
for line in open('file2.txt').readlines():
name, seq = line.strip().split()
length = len(seq)
ds[length - 6][seq] = 0
这样第一个文件的每一个序列需要与ds的每一个dictionary相比,对应不同的长度:
for seq in seqs: #省略了FASTQ reading
for i in range(10):
prefix = seq[6 + i]
if prefix in ds[i]:
ds[i] += 0
这样比直接比较应该快很多。

【在 w****w 的大作中提到】
: 最好把它们都搞成15,这样只要查一次就可以了。
: 以第二列为key, (count,file)为value建dictionary,然后取seq开始的6,..., 15,查
: dictionary。
:
: BC

相关主题
SQL combine two tables into one table and add a new column
少林寺外,蓝螃蟹向麻油兔挑战: mayoutu,你怎么会有将近4万块钱的炒股钱的
增加赌博种类
天籁之音隆重推出【我永远的童年】六一活动
进入Programming版参与讨论
f*****a
发帖数: 156
11
多谢。比我的代码快好几倍。

【在 w****w 的大作中提到】
: http://webbew.dyx.com/forum/viewtopic.php?f=2&t=8
f*****a
发帖数: 156
12
多谢。没用过klib。
这个和前面的python算法基本一样
如果用c++来算会更快么?

this.
handlers

【在 d****n 的大作中提到】
: FASTQ file customize deindex?
: step1, use klib->kseq to read fastq files. No other lib is faster than this.
: step 2, build a hash base on your barcode list, and open 1000 file handlers
: as the hash values.
: step3. iterate through your fastq files,(using kseq), when a
: barcode match a key write it to the value(file hanlder)
: I bet you no other solution is faster than this.

a****e
发帖数: 9589
13
用shell script 就可以搞定,还快

【在 f*****a 的大作中提到】
: 编程水平不行,用Python的readline和C++的getline写的code慢死了,求高效算法。
: 问题如下:
: 两个输入文件,文件1是fastq格式,几千万行,每行最多100个字符
: (每4行是一个序列的信息,其中的第2行是序列本身):
: @SEQ_ID1
: GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
: +
: !''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
: @SEQ_ID2
: AATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT

b***i
发帖数: 3043
14
是否可以读入到内存中?
是否可以使用Trie?

【在 f*****a 的大作中提到】
: 编程水平不行,用Python的readline和C++的getline写的code慢死了,求高效算法。
: 问题如下:
: 两个输入文件,文件1是fastq格式,几千万行,每行最多100个字符
: (每4行是一个序列的信息,其中的第2行是序列本身):
: @SEQ_ID1
: GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
: +
: !''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
: @SEQ_ID2
: AATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT

d******e
发帖数: 2265
15
这个
shang sed 很简单吧

【在 f*****a 的大作中提到】
: 编程水平不行,用Python的readline和C++的getline写的code慢死了,求高效算法。
: 问题如下:
: 两个输入文件,文件1是fastq格式,几千万行,每行最多100个字符
: (每4行是一个序列的信息,其中的第2行是序列本身):
: @SEQ_ID1
: GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
: +
: !''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
: @SEQ_ID2
: AATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT

b*****e
发帖数: 474
16
才几千万行,直接排序再分段分成很多小文件不就行了吗。
只需干一次,以后就很快了
1 (共1页)
进入Programming版参与讨论
相关主题
SQL check likeness between two large tables
Music版申请代发六一活动奖励
少林寺外,蓝螃蟹向麻油兔挑战: mayoutu,你怎么会有将近4万块钱(转载)
pker和nobodyno俩ID都是托
请教mySQL一条查询语句,有包子!
发三黄
阴差阳错
icloud逼一个家庭每人用不同的Apple ID?
Cascade delete, update 的问题(MS SQL)
SQL Server query 一问
相关话题的讨论汇总
话题: bc话题: 文件话题: seq话题: 序列话题: 55ccf