使用ctypes将Matlab转换为Python

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中访问该函数的命令。
我们应该怎么做?


在你的最后一句话中,我猜你是指“从Python中访问dll中的Matlab函数”,对吗? - dgorissen
2个回答

2

简短的回答 - 不行。

你不能将用MATLAB编写的代码导出为C形式的DLL,并使用ctypes在Python端与之交互,以期望比通常通过Unix管道进行的通信获得更高的性能提升(如在mlabwrapper中)。

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

使用C/C++重写(消除对MATLAB的依赖)

如果你没有像这里一样幸运地将项目代码自动生成。那么考虑用纯C重写你的代码,或使用IT++和Armadillo等C++库。


1
事实上,Armadillo 是将 Matlab 程序转换为 C++ 的巨大帮助,因为它提供了 Matlab-like API - mtall
如果安装了运行时,我们可以访问DLL吗?http://in.mathworks.com/products/compiler/mcr/index.html - Nidhin Bose J.

1

有许多资源/教程可用于解释如何使用ctypes并调用dll内的函数。例如,请参见此SO问题

如果我没记错的话,Matlab编译器应该可以正确地从dll导出所有函数,因此它们应该可以从ctypes中访问。但是,在尝试加载dll时,您必须确保Matlab库/运行时在您的库路径中。 Matlab网站有很多文档可供参考,例如此教程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接