Redian新闻
>
巨大的文件怎么transpose? (python)
avatar
巨大的文件怎么transpose? (python)# Programming - 葵花宝典
D*a
1
很多年没坐飞机了,想确认一下下面几个问题:
1. 在托运的行李箱里,大瓶洗发水,剪刀,剃须刀等东西可以装进去托运吧。知道
carry on有一些限制(比如剃须刀就不能携带登机,小瓶洗发水。。。)。
2. 在DC/MD/VA这一带,很可能选BWI机场,到上海或北京都可以,票可以分开买,不一
定要连程票。打算5月初回国,5月中旬就回美国。由于一些原因具体时间暂时不能定下
来,得等到4月中才能确定。很顾虑那时机票卖光,或者机票比现在的贵很多。5月初的
机票紧张吗?我的顾虑是不是多余的。
谢谢。
avatar
f*g
2
越来越年轻,越来越漂亮啊!
avatar
d*g
3
谈到明朝,大部分脑海里想到的几个词儿就是太监多、皇帝短命、乱的要死,哦,应该还有唐伯虎,那也是被电影《唐伯虎点秋香》强推的。
其实真正的大神是王阳明。
王阳明这一生经历的事情,随便说一件都很传奇。
他才气过人又正直不阿,惹怒当时的太监刘瑾被贬官到去贵州龙场当个九品芝麻官。龙场当时那地方就是蛮荒之地,人都还茹毛饮血呢,派他过去就是想让他死那儿,而且刘瑾在他出发前先把他打了个半死,等她走在路上还派人追杀,王阳明是假装跳水自尽才躲过一劫的。
一般人遇到这事儿都想死了,但经历了人生大起大落的王阳明心性十分坚毅,就这样拖着半条命来到鸟不拉屎的龙场,开始了他的芝麻官生涯。在这个穷乡僻壤之中,完成了心学的创立。核心就是大名鼎鼎的那句话,知行合一,以致良知。意思就是说你心性强大了,就能完成不可能完成的任务,成为圣贤。
靠着这股精神力量,王阳明顶过了人生的磨难,成为了明代罕见文武双全的将才、哲学家、思想家。
最让后人津津乐道的是他用35天时间平定宁王朱宸濠谋划了30年的叛乱。他用兵神出鬼没总是让敌人摸不到套路,带兵打仗没有一个败仗,可见他的军事才能也是十分卓越。
但这样罕见的天才也难逃时代的作弄,没有遇上一个好皇帝,57岁因病而亡。
avatar
h*a
4
最近还有硬盘的DEAL吗?那个DELL的1.5T的DEAL还有吗? 记得前几天看到那帖子了,
现在找不到了。
avatar
i*r
5
我有个20 million row * 100 column的文件
需要transpose,大概如下:
11 11 11 11 11...
22 22 22 22 22...
33 33 33 33 33...
44 44 44 44 44...
55 55 55 55 55...
...
to
1122334455...
1122334455...
我现在用的方法很慢,就是每次读一行2个char,比如 11,存到 string, 然后一行一
行的读,往后面加,1122, 112233, 11223344, 1122334455 等等。最后吧string
打出来。
居然要几个小时。
很早以前写了个bash的,时间应该在半小时以内吧。但是我想用python做。请问:
1) 这么慢是因为 不停往后面加东西吗?
2) 怎么变快?
avatar
o*l
6
1,可以
2,UA有IAD直飞北京的机票,BWI依然属于WAS机场,三个机场走的票价不会差很多。如
果不买联程票转机时需要取出行李再安检托运,很费时间。
五月初大部分学校没放假,价格不会很贵,那个时段的机票中等。
另外,因为地震和核泄漏危机,今年暑假的机票也许不会很紧张。

【在 D*********a 的大作中提到】
: 很多年没坐飞机了,想确认一下下面几个问题:
: 1. 在托运的行李箱里,大瓶洗发水,剪刀,剃须刀等东西可以装进去托运吧。知道
: carry on有一些限制(比如剃须刀就不能携带登机,小瓶洗发水。。。)。
: 2. 在DC/MD/VA这一带,很可能选BWI机场,到上海或北京都可以,票可以分开买,不一
: 定要连程票。打算5月初回国,5月中旬就回美国。由于一些原因具体时间暂时不能定下
: 来,得等到4月中才能确定。很顾虑那时机票卖光,或者机票比现在的贵很多。5月初的
: 机票紧张吗?我的顾虑是不是多余的。
: 谢谢。

avatar
k*s
7
你也不想一想,怎么可能越来越年轻,越来越漂亮
能老得不那么快就不错了
生老病死,人就是这样的

【在 f*****g 的大作中提到】
: 越来越年轻,越来越漂亮啊!
avatar
w*k
8
一生伏首拜阳明

该还有唐伯虎,那也是被电影《唐伯虎点秋香》强推的。
龙场当时那地方就是蛮荒之地,人都还茹毛饮血呢,派他过去就是想让他死那儿,而且
刘瑾在他出发前先把他打了个半死,等她走在路上还派人追杀,王阳明是假装跳水自尽
才躲过一劫的。
拖着半条命来到鸟不拉屎的龙场,开始了他的芝麻官生涯。在这个穷乡僻壤之中,完成
了心学的创立。核心就是大名鼎鼎的那句话,知行合一,以致良知。意思就是说你心性
强大了,就能完成不可能完成的任务,成为圣贤。
学家、思想家。
鬼没总是让敌人摸不到套路,带兵打仗没有一个败仗,可见他的军事才能也是十分卓越。

【在 d*******g 的大作中提到】
: 谈到明朝,大部分脑海里想到的几个词儿就是太监多、皇帝短命、乱的要死,哦,应该还有唐伯虎,那也是被电影《唐伯虎点秋香》强推的。
: 其实真正的大神是王阳明。
: 王阳明这一生经历的事情,随便说一件都很传奇。
: 他才气过人又正直不阿,惹怒当时的太监刘瑾被贬官到去贵州龙场当个九品芝麻官。龙场当时那地方就是蛮荒之地,人都还茹毛饮血呢,派他过去就是想让他死那儿,而且刘瑾在他出发前先把他打了个半死,等她走在路上还派人追杀,王阳明是假装跳水自尽才躲过一劫的。
: 一般人遇到这事儿都想死了,但经历了人生大起大落的王阳明心性十分坚毅,就这样拖着半条命来到鸟不拉屎的龙场,开始了他的芝麻官生涯。在这个穷乡僻壤之中,完成了心学的创立。核心就是大名鼎鼎的那句话,知行合一,以致良知。意思就是说你心性强大了,就能完成不可能完成的任务,成为圣贤。
: 靠着这股精神力量,王阳明顶过了人生的磨难,成为了明代罕见文武双全的将才、哲学家、思想家。
: 最让后人津津乐道的是他用35天时间平定宁王朱宸濠谋划了30年的叛乱。他用兵神出鬼没总是让敌人摸不到套路,带兵打仗没有一个败仗,可见他的军事才能也是十分卓越。
: 但这样罕见的天才也难逃时代的作弄,没有遇上一个好皇帝,57岁因病而亡。

avatar
d*n
9
可以去zipzoomfly转转

【在 h********a 的大作中提到】
: 最近还有硬盘的DEAL吗?那个DELL的1.5T的DEAL还有吗? 记得前几天看到那帖子了,
: 现在找不到了。

avatar
X*r
10
干吗加字符串,一边读一边打出来不就完了,一百列就重复一百遍。

【在 i***r 的大作中提到】
: 我有个20 million row * 100 column的文件
: 需要transpose,大概如下:
: 11 11 11 11 11...
: 22 22 22 22 22...
: 33 33 33 33 33...
: 44 44 44 44 44...
: 55 55 55 55 55...
: ...
: to
: 1122334455...

avatar
D*a
11
谢谢,对北京不熟,北京机场几个,坐到那个机场方便.

【在 o******l 的大作中提到】
: 1,可以
: 2,UA有IAD直飞北京的机票,BWI依然属于WAS机场,三个机场走的票价不会差很多。如
: 果不买联程票转机时需要取出行李再安检托运,很费时间。
: 五月初大部分学校没放假,价格不会很贵,那个时段的机票中等。
: 另外,因为地震和核泄漏危机,今年暑假的机票也许不会很紧张。

avatar
w*e
12
很可能是最后一个让日本人俯首的中国人
avatar
v*e
14
估计你这个是genome data吧,用 plink 转,很快的。
avatar
D*a
15
看了下,UA直飞的太贵了,可能需要别的选择。
avatar
s*t
16
呵呵,可以配享孔庙的人,当然不一般。这个基本就是圣人级别,比那些配享太庙,帝
陵的还要高一等。读书人的最高荣誉了吧?据说曾国藩如果不是闹太平天国,他就想追
求这个,做学问,做“圣人”。大概也相当于天主教里面封圣。不过配享孔庙的人数量
要少很多。
avatar
i*r
17
是genome data
还不知道plink怎么弄呢。。。这个ped就是plink的。
PED文件怎么搞成一长排,连less command看起来都好慢,一行就是20million。。。
我主要是想,直接python处理就完了,没想到今天居然跑了好几个小时才跑完

【在 v*******e 的大作中提到】
: 估计你这个是genome data吧,用 plink 转,很快的。
avatar
o*l
18
北京机场有好几个,你能到的只有北京国际机场。
比较方便,有专线到火车站,也有很多航班飞全国各地。
可以搜一下机场网站。

【在 D*********a 的大作中提到】
: 谢谢,对北京不熟,北京机场几个,坐到那个机场方便.
avatar
c*b
19
真牛
avatar
i*r
20
我已开始也想一边读一边打。
不知道频繁的 io读写 会不会更慢? 我有空了试试。
但是我那样不断往string后面加长,估计会频繁relocate memory,更慢?

【在 X****r 的大作中提到】
: 干吗加字符串,一边读一边打出来不就完了,一百列就重复一百遍。
avatar
X*r
21
python的string是immutable的,所以在字符串后面不断加长就会不断分配新的字符串
。一般的做法是用个list,每次把新字符串放到list的最后,完了一个join。

【在 i***r 的大作中提到】
: 我已开始也想一边读一边打。
: 不知道频繁的 io读写 会不会更慢? 我有空了试试。
: 但是我那样不断往string后面加长,估计会频繁relocate memory,更慢?

avatar
v*e
22

plink直接就有命令来transpose ped文件,产生tped文件。自己去plink网页上搜tped
。python不是万能的,自己编写程序容易出错,费时费力,已经有的工具用好就行了。

【在 i***r 的大作中提到】
: 是genome data
: 还不知道plink怎么弄呢。。。这个ped就是plink的。
: PED文件怎么搞成一长排,连less command看起来都好慢,一行就是20million。。。
: 我主要是想,直接python处理就完了,没想到今天居然跑了好几个小时才跑完

avatar
i*r
23
确实,已有的工具可靠,速度快。。。

tped

【在 v*******e 的大作中提到】
:
: plink直接就有命令来transpose ped文件,产生tped文件。自己去plink网页上搜tped
: 。python不是万能的,自己编写程序容易出错,费时费力,已经有的工具用好就行了。

avatar
i*r
24
有道理,我有空了benchmark一下,看差别多大

【在 X****r 的大作中提到】
: python的string是immutable的,所以在字符串后面不断加长就会不断分配新的字符串
: 。一般的做法是用个list,每次把新字符串放到list的最后,完了一个join。

avatar
p*o
25
贴代码,我帮你看看

【在 i***r 的大作中提到】
: 我有个20 million row * 100 column的文件
: 需要transpose,大概如下:
: 11 11 11 11 11...
: 22 22 22 22 22...
: 33 33 33 33 33...
: 44 44 44 44 44...
: 55 55 55 55 55...
: ...
: to
: 1122334455...

avatar
i*r
27
代码:
import sys
pop=98
def ped(genotype):
if genotype=='00':
ped='1 1 '
elif genotype=='01':
ped='1 2 '
elif genotype=='10':
ped='2 1 '
elif genotype=='11':
ped='2 2 '
else:
ped='0 0 '
return ped
def write_ped(filename,out):
fn=open(filename,'r')
fn_ped=open(out+'.ped','w')
fn_map=open(out+'.map','w')
modern_human=range(9,93) # 15+69
for ind in modern_human:
ind_genotype=''
fn.seek(0,0)
for line in fn.readlines():
lis=line[:-1].split("\t")
if len(lis) == (pop-1): # if 1 col less, then missing UCSC ref
lis.insert(8, "sw") # add junk
assert (len(lis) == pop)
ind_genotype += ped(lis[ind])
if ind==min(modern_human): # map file needs print only once
print(map(lis), file=fn_map)
print(ind_genotype, file=fn_ped)
fn.close()
fn_ped.close()
fn_map.close()

if __name__=="__main__":
if len(sys.argv)< 3:
print("Usage: %s " % sys.argv[0], file=sys.stderr)
sys.exit("Missing input file")
write_ped(sys.argv[1],sys.argv[2])

【在 p**o 的大作中提到】
: 贴代码,我帮你看看
avatar
c*e
28
把数据先存到内存里,再在内存里做些数学操作。内存多大?

【在 i***r 的大作中提到】
: 我有个20 million row * 100 column的文件
: 需要transpose,大概如下:
: 11 11 11 11 11...
: 22 22 22 22 22...
: 33 33 33 33 33...
: 44 44 44 44 44...
: 55 55 55 55 55...
: ...
: to
: 1122334455...

avatar
i*r
29
input 文件的某1行,共22million
chr1 46669 46670 snp 11 + A G dbsnp.100:rs2548905
00 00 00 00 01 01 11 NN NN 11 01 NN 00
NN NN NN 00 00 00 00 00 11 NN 11 01
11 01 NN 00 00 00 11 NN 00 01 NN NN 00
00 00 NN 00 00 NN 01 00 11 NN 00 NN 01
01 NN 11 00 NN 11 NN 00 00 NN 00 01
01 NN NN 11 01 11 11 11 11 11 01 NN 11
01 NN 11 00 11 11 01 11 a N a a N

【在 p**o 的大作中提到】
: 贴代码,我帮你看看
avatar
i*r
30
内存有250G
这个文件7G,实际操作大概占用2~3G?

【在 c*********e 的大作中提到】
: 把数据先存到内存里,再在内存里做些数学操作。内存多大?
avatar
c*e
31
那就在内存里做数学操作。

【在 i***r 的大作中提到】
: 内存有250G
: 这个文件7G,实际操作大概占用2~3G?

avatar
w*g
32
20 million row * 100 column, 即使存成text的话也就10G吧, 这种操作bottleneck在
磁盘, 假设100MB/s的话差不多读入2分钟, 写出2分钟, 无论如何10分钟应该够了啊.
你用numpy搞个大数组, 直接转置了输出难道有问题吗?

【在 i***r 的大作中提到】
: 我有个20 million row * 100 column的文件
: 需要transpose,大概如下:
: 11 11 11 11 11...
: 22 22 22 22 22...
: 33 33 33 33 33...
: 44 44 44 44 44...
: 55 55 55 55 55...
: ...
: to
: 1122334455...

avatar
w*w
33
你这个文件扫了快90次,当然慢了。根据内存多少要多列一起转置,而不是一列。你有
这么大内存,只要建个大矩阵,扫一次就可以了。而且你这里完全不用转置,直接产生
tped/tfam文件,而不是ped/map文件。
avatar
n*t
34
这个帖子深刻的说明了,学语言如果只学这种所谓高级语言,是没法写任何能用的大型
系统的。

【在 w****w 的大作中提到】
: 你这个文件扫了快90次,当然慢了。根据内存多少要多列一起转置,而不是一列。你有
: 这么大内存,只要建个大矩阵,扫一次就可以了。而且你这里完全不用转置,直接产生
: tped/tfam文件,而不是ped/map文件。

avatar
r*t
36
reads like c code. why not directlly write in c.

【在 i***r 的大作中提到】
: 代码:
: import sys
: pop=98
: def ped(genotype):
: if genotype=='00':
: ped='1 1 '
: elif genotype=='01':
: ped='1 2 '
: elif genotype=='10':
: ped='2 1 '

avatar
c*y
37
小猴子危言耸听了,哈哈。

【在 n******t 的大作中提到】
: 这个帖子深刻的说明了,学语言如果只学这种所谓高级语言,是没法写任何能用的大型
: 系统的。

avatar
x*u
38
mmap

【在 c*********e 的大作中提到】
: 把数据先存到内存里,再在内存里做些数学操作。内存多大?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。