【发布时间】:2013-11-19 10:10:33
【问题描述】:
我们目前有一个用 C++ 编写的数据导入/转换工具,它主要处理文本(例如几种不同格式的时间戳)数据并应用一些规范化/清理。
当前的解决方案速度非常快,性能至关重要。例如。我们进行了优化以最小化/避免解析循环中的对象分配,因为我们处理的每一行都会调用它,并且可能会产生严重的性能影响。
我们想要实现的是灵活地添加新的输入格式或应用额外的转换,只需更改脚本/配置文件而不是重新编译应用程序。
问题是:我们是否能够使用 Python Pandas 数据处理框架实现相当的性能,因为其中大部分似乎也使用低级优化 C 代码。
(这里的“可比”表示性能差异在可以通过添加2-4个额外线程来补偿的余量内)
Pandas 是适合这项工作的工具还是有不同的建议?
【问题讨论】:
-
Pandas 确实很快。我怀疑它是否比纯 C++ 更快,但我确信您知道唯一确定的方法是分析每个解决方案。我所知道的加快 Pandas 时间序列 CSV 解析的最佳技巧是:使用自定义日期解析函数,该函数利用字符串切片而不是 strptime。
-
有一些工具可以从 python 创建
c代码,但即使你这样做,我认为它不会比你的版本更快,因为 python 作为动态语言有开销。当 c++ 实现尚不可用时,您可能可以通过向 python 实现添加回退来实现灵活性。 -
@Exceptyon 你应该学会仔细阅读。 Python 在数字运算方面要慢 10 到 100 倍。进行 I/O 时,几乎所有时间都将被系统调用占用,而系统调用在 any 语言中花费相同的时间,因此在这种情况下,python 和 C/C++ 之间的区别是 much 更小,在某些情况下甚至不存在。 OP 正在询问开销在其特定应用程序中是否会很重要。我敢打赌,它可能很重要,但我敢打赌,它会比 10 倍的减速更小,可能要小得多。
-
无论如何,在没有告诉我们您到底想要做什么以及您有哪些限制的情况下,除了提供一些一般性建议外,我看不出我们如何回答您的问题。
pandas似乎是这项工作的最佳人选,但我不能排除对于您的特定应用程序可能会有更好的东西。 -
@Exceptyon 您的评论没有帮助或消息灵通。 pandas CSV 文件读取代码大部分是用 C 编写的,因此与仅用 C++ 编写的文件读取器具有相似的性能特征。
标签: c++ python performance csv pandas