我正在制作一个应用程序,它使用几种不同的算法(代理)分析一个或多个数据系列。我认为这些代理中的每一个都可以作为单独的Python脚本实现,我在我的应用程序中使用Python C API或Boost.Python运行。
我有点担心运行时开销TBH,因为我正在做一些相当重的数据处理,我不想每次模拟都要等几分钟。我通常会制作数十万甚至数百万的迭代,其中我调用外部“代理”;我是否更好地硬编码应用程序中的所有内容,或者性能下降是否可以容忍?
此外,除了Python之外,还有其他可以使用的解释语言吗?
答案 0 :(得分:10)
是的,吨。 Lua和Python似乎是最受欢迎的:
嵌入Lua
嵌入Python
嵌入Tcl
嵌入Ruby
嵌入Perl
嵌入JavaScript
有几十个JavaScript引擎,这只是一个例子。其中一些也非常快。
答案 1 :(得分:9)
Lua非常快。如果您需要更快的速度,请尝试LuaJIT,这非常棒。
答案 2 :(得分:5)
Tcl从一开始就被设计为嵌入式语言。
答案 3 :(得分:3)
我通常会制作数十万甚至数百万的迭代,我会调用外部“代理”
性能下降将是显而易见的,也许是痛苦的。如果您可以将数据放入数组并使用NumPy批量处理它,那么它应该更快。
NumPy让你可以非常轻松地连续进行一百万次算术运算。例如,平方数组的每个元素都是这样的:
>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> x**2
array([1, 4, 9, 16, 25, 36, 49])
超级简单,这里的紧密内循环实际上是用C实现的。
当然NumPy也可以进行更高级的数字运算。
答案 4 :(得分:2)
答案 5 :(得分:1)
对于数以百万计的调用(从我假设c ++,因为你提到了提升)到python中,是的:你会发现性能受到影响。这可能是也可能不是很重要 - 尝试新的“代理人”的速度增益可能大于命中率。 Python确实有快速的数值库(比如numpy)可能会有所帮助,但是你仍然会产生编组数据,调用python,gil等的开销。
是的,您可以嵌入许多其他语言:查看lua。另外,请查看swig.org,它可以连接除python之外的许多其他语言。
答案 6 :(得分:0)
您可以使用C ++模板和运算符重载创建嵌入式语言,例如参见ublas或ftensor矩阵语言。我不认为python或其他解释语言适合进行数字处理/数据处理。