使用ctypes将matlab转换为python
我们想在新的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中函数的命令。
我们该怎么办呢?
2 个回答
1
有很多资源和教程可以帮助你了解如何使用ctypes来调用dll里的函数。比如,你可以看看这个StackOverflow的问题。
如果我没记错的话,matlab编译器应该能正确导出dll里的所有函数,这样你就可以通过ctypes来访问它们。不过,你需要确保在加载dll的时候,matlab的库和运行时环境在你的库路径中。matlab网站上有很多相关的文档,比如你可以参考这个教程。
2
简短回答 - 不可以。
你不能把用MATLAB写的代码导出为C语言的DLL文件,然后在Python中用ctypes来调用它,这样也无法期待比通过Unix管道(就像mlabwrapper那样)更快的性能提升。
问题在于,这种DLL文件依赖于MCR(MATLAB运行时)。这个DLL里包含了你的源代码,但是经过混淆处理的。当你调用导出的函数时,DLL会被加载,然后解压源代码,创建一个MATLAB的实例(也就是一个解释器),并通过MATLAB的JIT(即时编译器)来处理你的代码和结果。这种功能被称为“MATLAB编译器工具箱”。另外,它也可以生成操作系统可执行文件(逻辑是一样的)。
用C/C++重写(摆脱对MATLAB的依赖)
如果你没有运气像这里那样生成代码,那么可以考虑用普通的C语言或者使用C++库,比如IT++或Armadillo,来重写你的代码。