|
|
1
4
以下最简单的C扩展已经大大改进了内置的功能,每秒转换的字符串数是原来的三倍(650kcps比214kcps):
这显然不适用于任意长度的整数和其他各种特殊情况,但在我们的场景中这并没有问题。 |
|
|
2
3
通过确保在最紧密的循环中只使用“局部”变量,您将获得一定的速度百分比。这个
你真的需要在任何时候都存储所有的十亿数字吗。考虑使用一些迭代器一次只给你几个值,十亿个数字会占用一点存储空间。将这些附加到一个列表中,一次一个,将需要几次大规模的重新分配。 如果可能的话,让你的循环完全脱离Python。这里的地图功能可以是您的朋友。我不确定你的数据是如何存储的。如果每行只有一个数字,您可以将代码减少到
如果每行有多个空格分隔的值,那么深入研究itertools以避免Python中的循环代码。此版本还具有创建数字迭代器的附加好处,因此一次只能从文件中输出一个或多个数字,而不是一次10亿。
|
|
|
3
2
我可能会建议,对于原始速度,Python并不是完成此任务的合适工具。手工编码的C实现将轻松击败Python。 |
|
|
4
1
Psyco library 或者用低级语言(如C/C++)编写应用程序。 |
|
|
5
1
正如其他人所说,您可以编写自己的C模块来为您进行解析/转换。然后你可以简单地导入它并调用它。您可能能够使用Pyrex或其Cython衍生物从Python生成C(通过向Python添加一些类型约束提示)。 Cython 看看这是否有帮助。
不过我想到的另一个问题是。。。你打算用这十亿个整数做什么?是否可能将它们作为字符串加载、作为字符串搜索并根据需要执行延迟转换?或者你可以使用
|
|
6
0
这可能不是你的选择,但我会认真考虑使用二进制文件而不是文本。它经常变化吗?如果没有,您可以对其进行预处理。 |
|
|
7
0
这是numpy做得很好的事情:
|
|
Sweepy Dodo · JSON lite的格式化 1 年前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
Zegarek · Postgresql递归查询未提供预期结果 1 年前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 2 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 2 年前 |