python - matlab 到 python 使用 ctypes

标签 python matlab ctypes

我们想在我们的新 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中找不到访问函数的命令。
我们该怎么办?

最佳答案

简答 - 否

您不能将用 MATLAB 编写的代码导出为 DLL 形式的 C 并在 python 端使用 ctypes 与之交互,这样您之后就可以期望通过 unix 管道(如 mlabwrapper)进行的常规通信获得显着的性能提升。

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

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

如果您没有像 here 中那样幸运地代码生成您的项目.考虑用普通 C 重写您的代码,或使用 C++ 库作为 IT++ 或 Armadillo。

关于python - matlab 到 python 使用 ctypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292711/

相关文章:

python - 运行后在解释器中访问脚本的变量和函数

python - 为什么 CSV 文件将第一列加载为 dtype64[ns],但将 txt 作为对象加载

arrays - 在 MATLAB regexpr 中使用数组项作为替换

python - 如何在 python 中将 ctypes.c_uint32 转换为 int?

使用 COM 对象的 Python ctypes 和 DLL

python - 如何从交互式 shell 访问调用源行

python - 如何在进行更改后重新运行过去的 DAG 运行

file - 在 MATLAB 中,我可以在同一个文件中同时拥有脚本和函数定义吗?

matlab - Simulink 中具有定义频率内容的信号

python - 如何将 C 函数编译成 numpy ufunc 并动态加载它?