我正在制作一个应用程序,使用多种不同的算法(代理)分析一个或多个数据系列。我想到每个代理都可以实现为单独的Python脚本,然后在我的应用程序中使用Python C API或Boost.Python运行。
说实话,我有点担心运行时开销,因为我正在进行一些相当重的数据处理,我不希望每次模拟都要等待几分钟。在这些迭代中,我通常会调用外部的“代理”数十万次,甚至数百万次;我是应该将所有内容硬编码到应用程序中,还是性能下降是可以容忍的?
此外,除了Python之外,还有其他解释型语言可以使用吗?
我正在制作一个应用程序,使用多种不同的算法(代理)分析一个或多个数据系列。我想到每个代理都可以实现为单独的Python脚本,然后在我的应用程序中使用Python C API或Boost.Python运行。
说实话,我有点担心运行时开销,因为我正在进行一些相当重的数据处理,我不希望每次模拟都要等待几分钟。在这些迭代中,我通常会调用外部的“代理”数十万次,甚至数百万次;我是应该将所有内容硬编码到应用程序中,还是性能下降是可以容忍的?
此外,除了Python之外,还有其他解释型语言可以使用吗?
是的,有很多种。Lua和Python似乎是最流行的:
嵌入Lua
嵌入Python
嵌入Tcl
嵌入Ruby
嵌入Perl
嵌入JavaScript
有许多JavaScript引擎可供选择,这只是其中的一个例子。其中一些也非常快速。
Tcl是一种从头开始设计的嵌入式语言。
我通常会进行数十万次、甚至数百万次迭代,在其中调用外部“代理”。
性能下降会很明显,甚至可能是痛苦的。如果你可以将数据放入数组中,并使用NumPy批处理处理,那么速度应该会更快。
NumPy使得在一系列操作中执行任何一种算术运算变得非常容易。例如,对数组中的每个元素进行平方就像这样:
>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> x**2
array([1, 4, 9, 16, 25, 36, 49])
非常容易,这里的紧密内部循环实际上是用C实现的。
当然,NumPy也可以进行更高级的数字计算。
对于数以百万计的调用(我假设是从C++调用,因为你提到了Boost)进入Python,是的:你会注意到性能下降。这可能很重要,也可能不重要——也许尝试新的“代理”所获得的速度增益会比受到的影响更大。Python确实有快速的数值库(例如NumPy),可以帮助解决问题,但你仍然需要耗费数据编组、调用Python和GIL等方面的开销。
是的,你可以嵌入许多其他语言:请查看Lua。此外,请查看swig.org,它可以连接许多除Python以外的其他语言。
你可以使用C++模板和运算符重载来创建嵌入式语言,例如ublas或ftensor矩阵语言。我认为Python或其他解释型语言不适合进行数据处理或数值计算。