Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ctypes从matlab到python_Python_Matlab_Ctypes - Fatal编程技术网

使用ctypes从matlab到python

使用ctypes从matlab到python,python,matlab,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('addin

我们希望在新的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中找不到访问函数的命令。

我们应该怎么做?

有很多资源/教程可以用来解释如何在dll中使用ctypes和调用函数。例如,见

如果我没记错的话,matlab编译器应该正确地从dll中导出所有函数,这样就可以从ctypes中访问它们。但是,在尝试加载dll时,必须确保matlab库/运行时位于库路径中。matlab网站上有很多关于这方面的文档,例如参见。

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

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

在C/C++中重写(失去对MATLAB的依赖性)
如果您没有幸运地按照中的代码生成项目。考虑在C中重写代码,或者使用C++库作为它的+++或犰狳。

在你的最后一句话中,我假设你是指“从Python中访问DLL中的Matlab函数”,对吗?的确,它帮助MATLAB程序转化为C++,因为它提供了一个。如果运行时安装,我们可以访问DLL吗?