3

我们想在我们的新 python 应用程序中使用用 matlab 编写的函数。我们想使用 ctypes 因为用户在他的机器上不需要 matlab。我们正在测试此方法,但无法使其正常工作。我们缺乏 c 知识(还有更多……)。这是我们简单的测试matlab函数:

function [ z ] = adding( x,y ) 
    z = x + y; 
end

我们用 matlab 将它编译成一个共享库 .dll。在 python 解释器中,我们有:

import ctypes
dl = ctypes.CDLL('adding.dll') 

现在我们被卡住了,因为我们在 matlab 中找不到访问该函数的命令。
我们应该做什么 ?

4

2 回答 2

2

简短的回答 - 不。

您不能将用 MATLAB 编写的代码以 DLL 的形式导出为 C 并在 python 端使用 ctypes 与其接口,这样您就可以期待通过 unix 管道(如在 mlabwrapper 中)的常规通信,大幅提升性能。

问题是这样的 DLL 依赖于 MCR(matlab 运行时)。DLL 以模糊的形式包含您的源代码。当您调用导出函数时 - 加载 DLL,然后解压缩源代码,创建 MATLAB 实例(解释器)并将您的代码及其结果与 MATLAB JIT 进行通信。此功能称为“MATLAB 编译器工具箱”。或者,它可以生成操作系统可执行文件(遵循相同的逻辑)。

用 C/C++ 重写(失去对 MATLAB 的依赖)

如果您不幸运地像这里一样代码生成您的项目。考虑用纯 C 重写代码或使用 C++ 库作为 IT++ 或犰狳。

于 2013-08-18T17:49:09.230 回答
1

有许多资源/教程可用于解释如何在 dll 中使用 ctypes 和调用函数。参见例如这个 SO question

如果我没记错的话,matlab 编译器应该正确地从 dll 中导出所有函数,以便可以从 ctypes 访问它们。但是,当您尝试加载 dll 时,您必须确保 matlab 库/运行时位于您的库路径中。matlab 站点为此提供了大量文档,例如本教程

于 2013-04-08T11:31:25.953 回答