我有一堆来自MS论文的MATLAB代码,现在我想将其转换为Python(使用numpy/scipy和matplotlib)并作为开源分发.我知道MATLAB和Python科学库之间的相似性,并且手动转换它们将不会超过两周(假设我每天都在努力工作一段时间).我想知道是否已经有任何可以进行转换的工具.
我试图将Python 2.6嵌入到MATLAB(7.12)中.我想嵌入一个用C编写的mex文件.这对于使用标量的小型简单示例很有用.但是,如果导入Numpy(1.6.1),MATLAB崩溃了.我说无论如何,因为我已经尝试了许多方法来加载numpy库,包括
在python模块(.py)中:
from numpy import *
Run Code Online (Sandbox Code Playgroud)随着PyRun_SimpleString在MEX文件:
PyRun_SimpleString(“from numpy import *”);
Run Code Online (Sandbox Code Playgroud)调用numpy函数Py_oBject_CallObject:
pOut = PyObject_CallObject(pFunc, pArgs);
Run Code Online (Sandbox Code Playgroud)最初,我认为这可能是将Numpy嵌入C中的问题.但是,当嵌入在使用Visual Studio 2005 C编译器的/ MD(多线程)开关的命令行编译的简单C文件中时,Numpy工作正常.接下来,我想我只需要在MATLAB中更改make文件以包含/ MD开关.没有这样的运气,mexopts.bat与/ MD开关编译.我还手动注释了Numpy init模块中的行,以找出崩溃的MATLAB.似乎加载任何扩展名为pyd的文件会导致MATLAB崩溃.在NumPy中加载的第一个这样的文件是multiarray.pyd.MATLAB文档描述了如何使用Visual Studio调试mex文件,并在下面放置了错误消息.在这一点上,我知道问题是pyd的内存问题和MATLAB的一些冲突.有趣的是,我可以在MATLAB中使用系统命令来启动使用numpy的python中的进程,并且不会生成错误.我将在MATLAB的错误消息下面粘贴,然后在可视化工作室中粘贴MATLAB崩溃的过程中的DEBUG输出.但是,我并没有粘贴整个事情,因为第一次机会的例外列表很长.有没有解决这个集成问题的建议?
MATLAB error
Matlab has encountered an internal problem and needs to close
MATLAB crash file:C:\Users\pml355\AppData\Local\Temp\matlab_crash_dump.3484-1:
------------------------------------------------------------------------
Segmentation violation detected at Tue Oct 18 12:19:03 2011
------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled
Default Encoding: windows-1252
MATLAB License : 163857
MATLAB Root : C:\Program Files\MATLAB\R2011a
MATLAB Version : 7.12.0.635 (R2011a)
Operating System: …Run Code Online (Sandbox Code Playgroud) 请不要将此标记为如何从matlab调用python和sklearn的副本?因为我认为这个问题没有真正回答.
自从Matlab Release R2014b我认为,可以直接使用matlab中的python.
简而言之,您只需要放在pypython调用前面.
我的设置(在使用命令为matlab提供python路径之后pyversion('PATH_TO_PYTHON'),运行正常.我甚至可以使用dask多处理.非常酷.例如,执行py.dask.distributed.Client结果
Python Client with properties:
asynchronous: 0
cluster: [1×1 py.distributed.deploy.local.LocalCluster]
get_futures_error: [1×1 py.method]
coroutines: [1×1 py.list]
scheduler_file: [1×1 py.NoneType]
loop: [1×1 py.tornado.platform.select.SelectIOLoop]
recreate_error_locally: [1×1 py.method]
refcount: [1×1 py.collections.defaultdict]
extensions: [1×1 py.dict]
scheduler: [1×1 py.distributed.core.rpc]
rpc: [1×1 py.distributed.core.ConnectionPool]
futures: [1×1 py.dict]
scheduler_comm: [1×1 py.distributed.batched.BatchedSend]
status: [1×7 py.str]
connection_args: [1×1 py.dict]
id: [1×43 py.str]
generation: [1×1 py.int]
io_loop: [1×1 py.tornado.platform.select.SelectIOLoop]
security: [1×1 py.distributed.security.Security]
<Client: scheduler='tcp://127.0.0.1:59795' …Run Code Online (Sandbox Code Playgroud)