python数字形式转换代码_python在numpy数组中转换带格式数字的字符串...

我有一个很大的ASCII文件(?100GB),其中包含大约1.000.000行的已知格式化数字,我尝试使用python处理它们.该文件太大,无法完全读入内存,因此我决定逐行处理该文件:

fp = open(file_name)

for count,line in enumerate(fp):

data = np.array(line.split(),dtype=np.float)

#do stuff

fp.close()

事实证明,我将程序的大部分运行时间都花在data =行中.有什么方法可以加快生产速度吗?而且,执行速度似乎比我从带格式读取的本机FORTRAN程序中获得的速度要慢得多(请参阅此question,我已经实现了FORTRAN字符串处理器并将其与f2py一起使用,但运行时间仅与数据相当=行.我猜想Python / FORTRAN之间的I / O处理和类型转换会杀死我从FORTRAN中获得的收益)

既然我知道格式,难道不应该有一种更好和更快的方式来使用split()吗?就像是:

data = readf(line,'(1000F20.10)')

我尝试了fortranformat程序包,该程序效果很好,但就我而言,它的速度比split()方法慢了三倍.

附:根据ExP和root的建议,我尝试了np.fromstring并使其成为快速而肮脏的基准测试:

t1 = time.time()

for i in range(500):

data=np.array(line.split(),dtype=np.float)

t2 = time.time()

print (t2-t1)/500

print data.shape

print data[0]

0.00160977363586

(9002,)

0.0015162509

和:

t1 = time.time()

for i in range(500):

data = np.fromstring(line,sep=' ',dtype=np.float,count=9002)

t2 = time.time()

print (t2-t1)/500

print data.shape

print data[0]

0.00159792804718

(9002,)

0.0015162509

所以fromstring实际上对我来说稍微慢一些.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值