python – 有效地将字符串列表转换为float32
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 有效地将字符串列表转换为float32,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2026字,纯文字阅读大概需要3分钟。
内容图文
我有一个3000×300矩阵文件(浮点数).当我读取并转换为float时,我得到了float64,这在python中是默认的.我尝试使用numpy和map()将其转换为float32(),但它们看起来都非常低效.
我的代码:
x = open(readFrom, 'r').readlines()
y = [[float(i) for i in s.split()] for s in x]
所用时间:0:00:00.996000
numpy实现:
x = open(readFrom, 'r').readlines()
y = [[np.float32(i) for i in s.split()] for s in x]
所用时间:0:00:06.093000
地图()
x = open(readFrom, 'r').readlines()
y = [map(np.float32, s.split()) for s in x]
所用时间:0:00:05.474000
如何非常有效地转换为float32?
谢谢.
更新:
numpy.loadtxt()或numpy.genfromtxt()无效(给出内存错误)的大文件.我发布了一个与此相关的问题,我在这里介绍的方法适用于巨大的矩阵文件(50,000×5000). here is the question
解决方法:
如果内存有问题,并且如果您提前知道字段的大小,则可能不希望首先读取整个文件.这样的事情可能更合适:
#allocate memory (np.empty would work too and be marginally faster,
# but probably not worth mentioning).
a=np.zeros((3000,300),dtype=np.float32)
with open(filename) as f:
for i,line in enumerate(f):
a[i,:]=map(np.float32,line.split())
在我的机器上进行几次快速(和令人惊讶的)测试后,似乎甚至不需要地图:
a=np.zeros((3000,300),dtype=np.float32)
with open(filename) as f:
for i,line in enumerate(f):
a[i,:]=line.split()
这可能不是最快的,但它肯定是最有效的内存方式.
一些测试:
import numpy as np
def func1(): #No map -- And pretty speedy :-).
a=np.zeros((3000,300),dtype=np.float32)
with open('junk.txt') as f:
for i,line in enumerate(f):
a[i,:]=line.split()
def func2():
a=np.zeros((3000,300),dtype=np.float32)
with open('junk.txt') as f:
for i,line in enumerate(f):
a[i,:]=map(np.float32,line.split())
def func3():
a=np.zeros((3000,300),dtype=np.float32)
with open('junk.txt') as f:
for i,line in enumerate(f):
a[i,:]=map(float,line.split())
import timeit
print timeit.timeit('func1()',setup='from __main__ import func1',number=3) #1.36s
print timeit.timeit('func2()',setup='from __main__ import func2',number=3) #11.53s
print timeit.timeit('func3()',setup='from __main__ import func3',number=3) #1.72s
内容总结
以上是互联网集市为您收集整理的python – 有效地将字符串列表转换为float32全部内容,希望文章能够帮你解决python – 有效地将字符串列表转换为float32所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。