- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种加速文件加载的方法:
数据包含约100万行,制表符以“\t”(tabulation char)分隔,utf8编码,使用以下代码解析完整文件大约需要9秒。但是,我希望几乎是一秒钟!
def load(filename):
features = []
with codecs.open(filename, 'rb', 'utf-8') as f:
previous = ""
for n, s in enumerate(f):
splitted = tuple(s.rstrip().split("\t"))
if len(splitted) != 2:
sys.exit("wrong format!")
if previous >= splitted:
sys.exit("unordered feature")
previous = splitted
features.append(splitted)
return features
我想知道是否有任何二进制格式的数据可以加快速度?或者,如果我可以从某些 NumPy
或任何其他库中获益以提高加载速度。
也许你可以就另一个速度瓶颈给我建议?
编辑:所以我尝试了您的一些想法,谢谢!顺便说一句,我真的需要巨大列表中的元组(字符串,字符串)...这是结果,我获得了 50% 的时间 :) 现在我要处理 NumPy 二进制数据,正如我注意到的另一个巨大的文件加载速度真的非常快......
import codecs
def load0(filename):
with codecs.open(filename, 'rb', 'utf-8') as f:
return f.readlines()
def load1(filename):
with codecs.open(filename, 'rb', 'utf-8') as f:
return [tuple(x.rstrip().split("\t")) for x in f.readlines()]
def load3(filename):
features = []
with codecs.open(filename, 'rb', 'utf-8') as f:
for n, s in enumerate(f):
splitted = tuple(s.rstrip().split("\t"))
features.append(splitted)
return features
def load4(filename):
with codecs.open(filename, 'rb', 'utf-8') as f:
for s in f:
yield tuple(s.rstrip().split("\t"))
a = datetime.datetime.now()
r0 = load0(myfile)
b = datetime.datetime.now()
print "f.readlines(): %s" % (b-a)
a = datetime.datetime.now()
r1 = load1(myfile)
b = datetime.datetime.now()
print """[tuple(x.rstrip().split("\\t")) for x in f.readlines()]: %s""" % (b-a)
a = datetime.datetime.now()
r3 = load3(myfile)
b = datetime.datetime.now()
print """load3: %s""" % (b-a)
if r1 == r3: print "OK: speeded and similars!"
a = datetime.datetime.now()
r4 = [x for x in load4(myfile)]
b = datetime.datetime.now()
print """load4: %s""" % (b-a)
if r4 == r3: print "OK: speeded and similars!"
结果:
f.readlines(): 0:00:00.208000
[tuple(x.rstrip().split("\t")) for x in f.readlines()]: 0:00:02.310000
load3: 0:00:07.883000
OK: speeded and similars!
load4: 0:00:07.943000
OK: speeded and similars!
非常奇怪的是,我注意到我可以在连续两次运行中获得几乎两倍的时间(但不是每次):
>>> ================================ RESTART ================================
>>>
f.readlines(): 0:00:00.220000
[tuple(x.rstrip().split("\t")) for x in f.readlines()]: 0:00:02.479000
load3: 0:00:08.288000
OK: speeded and similars!
>>> ================================ RESTART ================================
>>>
f.readlines(): 0:00:00.279000
[tuple(x.rstrip().split("\t")) for x in f.readlines()]: 0:00:04.983000
load3: 0:00:10.404000
OK: speeded and similars!
最新编辑:好吧,我尝试修改以使用 numpy.load
...这对我来说很奇怪...来自“普通”文件和我的1022860 个字符串和 10 KB。在执行了 numpy.save(numpy.array(load1(myfile)))
之后,我的内存达到了 895 MB!然后用 numpy.load()
重新加载它,我在连续运行时得到这种计时:
>>> ================================ RESTART ================================
loading: 0:00:11.422000 done.
>>> ================================ RESTART ================================
loading: 0:00:00.759000 done.
可能是 numpy 做了一些内存操作以避免将来重新加载?
最佳答案
试试这个版本,既然你提到检查不重要,我就把它去掉了。
def load(filename):
with codecs.open(filename, 'rb', 'utf-8') as f:
for s in f:
yield tuple(s.rstrip().split("\t"))
results = [x for x in load('somebigfile.txt')]
关于 python : how to speed up this file loading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12250781/
好吧,我是编程新手,我想知道如何打印某些字段的值。例如,我有一个速度,单位是节(21 节),如何将“节”部分添加到我的代码中,这样我就不会只打印整数?我希望它有 [number] 节。这是我到目前为止
我正在研究堆算法。 我认为堆算法作为函数会比纯代码慢。 所以我做了一个测试。但我发现函数式代码比纯代码快得多。 我觉得这很奇怪,我不知道为什么。 enter image description her
除了明确的清晰度,我们为什么要坚持:car.getSpeed()和 car.setSpeed(55)当这也可以使用时:car.speed()和 car.speed(55) 我知道 get() 和 se
我正在尝试实现 google speed limit API 来计算从一个位置到另一个位置所需的最低速度。但是当我在浏览器中运行时出现以下错误。 谁能帮我解决这个问题?谢谢 "error": {
我正在创建一个 LAN 速度测试,它在指定位置创建一个指定大小的数据文件,并记录创建/读取它的速度。在大多数情况下,这是正常工作的,只有一个问题:读取速度快得离谱,因为它所做的只是计算文件打开所需的时
我有以下函数,它会为生成的每个订单项调用。有谁知道如何加快速度? private String getDetails(String doc){ String table=""; jav
我正在尝试使用 C#、sdl.net 开发一个简单的 2d 赛车游戏(自上而下查看)。现在,我正在尝试管理我的车的速度、加速度和刹车。我的问题是算法。我的循环 (Events_Tick) 每秒执行 5
我正在读取一个包含 500000 行的文件。我正在测试多线程如何加速进程.... private void multiThreadRead(int num){ for(int i=1; i"+
Java Robot 类允许移动鼠标,就好像移动了实际的物理鼠标一样。 但是,如何以人性化(而非即时)的方式将鼠标从 Point1 移动到 Point2?也就是说,如何设置移动速度? 如果Robot类
我无法找到有关此主题的现有答案。 我正在运行一个连接到远程 redis 服务器(不在同一主机上)的 redis 客户端。 我可以通过域名或服务器的 IP 连接,即我可以通过 redis-cli -h
我正在尝试将 GPS 功能添加到我的 iPhone 应用程序中。这是一款在步行或运行时使用的锻炼应用程序。所以我想使用 GPS 来显示人的移动速度(以英里/小时和分钟/英里为单位)。 我应该如何配置
所以我有一个以“速度”移动的对象,现在我设置了代码,当该对象与另一个对象碰撞时,该对象的速度会降低。我尝试通过改变速度来实现这一点,当速度在 3 秒后改变时,将其改回原来的速度。 这是我自己尝试过的,
这是我的 table : CREATE TABLE `tab_adasf` ( `adasf_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
我正在寻找一种加速文件加载的方法: 数据包含约100万行,制表符以“\t”(tabulation char)分隔,utf8编码,使用以下代码解析完整文件大约需要9秒。但是,我希望几乎是一秒钟! def
我创建了一个 python 程序,该程序使用 ArcGIS 的“CostPath”函数在 shapefile“selected_patches.shp”中包含的几个多边形之间自动构建最低成本路径
我有 36 个人和 6 张 table 。我想围绕每张 table 组成 6 个小组。然后再组成 6 个其他组,再组成 6 个其他组……直到每个人都遇到每个人,但没有人遇到两次。 到目前为止,我想出了
我正在努力提高我的 Google Page Speed 得分。目前移动设备为 51/100,桌面设备为 83/100。 其中一个问题是“消除首屏内容中阻止渲染的 JavaScript 和 CSS”。适
所以我在几个小时内一直在寻找为什么我的 iPhone 应用程序讨厌我。这是我得到的错误:警告:“speedView”的局部声明隐藏了实例变量。这是我的 .m 文件 @implementation Ma
我最近做了一个网站,但加载速度很慢。我的 Firebug 页面速度得分是 82/100。我觉得这很好。我的网站有 2 个图像,它们有 100KB 和一些其他小图像,用于子弹、箭头和不超过 50KB 的
我正在用 python 构建词形还原器。因为我需要它实时运行/处理相当大量的数据,所以处理速度是最重要的。数据:我有所有可能的后缀,这些后缀链接到它们可以组合的所有词类型。此外,我还有与其词型和引理相
我是一名优秀的程序员,十分优秀!