免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2892 | 回复: 7
打印 上一主题 下一主题

求使程序更高效简洁的方法 [复制链接]

论坛徽章:
2
巨蟹座
日期:2014-05-21 16:42:40巳蛇
日期:2014-05-22 08:44:29
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-11 18:47 |只看该作者 |正序浏览
各位大侠,我是做生物信息的,刚入门。现在我要处理两个文件:file1内容大致如下:
chr1    1       100000
chr1    100001  200000
chr1    200001  300000
chr1    300001  400000
chr1    400001  500000
.         .            .
.         .            .
chr1    195276242       195276332

file2的内容如下:
chr1    1806    1896
chr1    1814    1904
chr1    1904    1994
chr1    1981    2071
chr1    2001    2091
.         .            .
.         .            .
chr1    195275501       195275591
我想统计一下这两个文件每一行的起始坐标统计一下file2中落入file1中每一行所代表的区间的数目,由于“file1” “file2”各有25个(我要统计25个染色体,每个file1和file2都是一 一对应的,是同一条染色体上的坐标,如上面两个file1和file2所示,都是chr1),每个file2文件都很大,我用了三重循环来做,可是发现程序运行的特别慢,想问问各位大侠用什么方法能使程序更高效呢?

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
8 [报告]
发表于 2013-12-12 09:05 |只看该作者
告诉你个笨方法··
my @file1 = (1..10000);
my @file2 = (1806..1896);
这样用grep抓两个数组的交集就可以了···
不过内存占用比较大···但是代码简介。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
7 [报告]
发表于 2013-12-11 22:07 |只看该作者
回复 6# skyyy90


    先读一行file1,记住 start ,end
    读一行file2,判断当前的位置是否在start,end范围,如果在继续读file2,直到超过范围,再读一行file1,
   以此类推,。。。

论坛徽章:
2
巨蟹座
日期:2014-05-21 16:42:40巳蛇
日期:2014-05-22 08:44:29
6 [报告]
发表于 2013-12-11 21:30 |只看该作者
回复 5# yinyuemi
目前我的想法是依次读取file1的每一行,然后嵌套一个循环读取file2,但是这样下来对于file1里面的每一行来说,都要读取file2,file1里面有1000多行,file2要被读1000多次,这正是我纠结的地方,是不是我的思路不对?

   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2013-12-11 21:08 |只看该作者
回复 1# skyyy90


    给你个思路吧,用你判断的条件交替读取file1 file2的办法,每个文件读一次就可以完成统计

论坛徽章:
2
巨蟹座
日期:2014-05-21 16:42:40巳蛇
日期:2014-05-22 08:44:29
4 [报告]
发表于 2013-12-11 20:46 |只看该作者
是我把问题说得不够清楚么。。。

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
3 [报告]
发表于 2013-12-11 19:54 |只看该作者
本帖最后由 pitonas 于 2013-12-11 12:56 编辑

file1 1~500000
chr1    1       100000
chr1    100001  200000
chr1    200001  300000
chr1    300001  400000
chr1    400001  500000
file2的内容如下:
chr1    1806    1896   => 1 < x < 500000 => + 1
chr1    1814    1904   => 1 < x < 500000 => + 1
chr1    1904    1994   => 1 < x < 500000 => + 1

数目 = 3
回复 1# skyyy90

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2013-12-11 19:51 |只看该作者
{:2_172:} 想问问大侠
file2 chr1    1806    1896
落入file1 chr1    1       100000 => 数目 + 1
回复 1# skyyy90


   
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP