按需组装函数并快速计算

有一些解释型语言,如Lisp、Tcl、Perl等,可以在运行时轻松地在代码中定义lambda/proc/sub,并在同一会话中进行评估。

还有一些编译型语言,如C++,其执行速度远快于解释型语言,但在运行时定义函数并执行它并非易事,甚至可能根本不可能实现。

这里的问题是要做到以下几点:

  1. 在运行时定义函数:例如,根据初始输入数据推导出数据的分析模型。

  2. 在循环中快速执行上述函数:例如,应用推导出的分析模型来分析传入的数据。

我看到的一个解决方案并不十分理想:

  1. 根据初始输入数据,在嵌入式Tcl中推导出表示分析模型的过程。

  2. 通过在Tcl中对一组样本点评估该过程,创建一个查找表,这些样本点乐观地讲,可以覆盖适用范围。

  3. 将查找表从Tcl解释器传回给二进制文件(该文件是用C++开发的)。

  4. 然后通过在查找表中“足够接近”的值之间进行插值来分析传入的数据。

上述解决方案虽然有效,但存在不少概念和计算上的问题。因此问题来了:是否可以在C++中纯粹定义一个函数,并使其在同一运行时会话中可用?

从概念上讲,是否可以像创建一个字符串形式的函数,在内存中编译它,然后以某种方式将其链接回正在执行的二进制文件?


回答:

如果你想要一个开箱即用的解决方案,可以看看ExprTK。如果你想自己编写表达式解析器,可以查看Boost Spirit

另一种方法是在运行时动态创建C++代码,将其编译为共享库(插件)并加载。这可能是最快的解决方案。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注