gpt4 book ai didi

python - 在 MATLAB 中嵌入 Python

转载 作者:IT老高 更新时间:2023-10-28 22:01:16 30 4
gpt4 key购买 nike

我正在尝试将 Python 2.6 嵌入到 MATLAB (7.12) 中。我想嵌入一个用 C 编写的 mex 文件。这对于使用标量的小型简单示例效果很好。但是,如果无论如何导入 Numpy (1.6.1),MATLAB 会崩溃。无论如何,我之所以这么说是因为我尝试了多种方法来加载 numpy 库,包括

  1. 在python模块(.py)中:

    from numpy import *
  2. 在 mex 文件中使用 PyRun_SimpleString:

    PyRun_SimpleString(“from numpy import *”);
  3. 使用 Py_oBject_CallObject 调用 numpy 函数:

    pOut  = PyObject_CallObject(pFunc, pArgs); 

最初,我认为这可能是在 C 中嵌入 Numpy 的问题。但是,当嵌入简单的 C 文件时,Numpy 可以正常工作,这些文件是使用 Visual Studios 2005 C 编译器使用/MD(多线程)开关从命令行编译的.接下来,我想我只是将 MATLAB 中的 make 文件更改为包含/MD 开关。没有这样的运气,mexopts.bat 使用/MD 开关编译。我还手动注释掉了 Numpy init 模块中的行,以查找导致 MATLAB 崩溃的原因。加载任何扩展名为 pyd 的文件似乎会使 MATLAB 崩溃。 NumPy 中加载的第一个此类文件是 multiarray.pyd。 MATLAB 文档描述了如何使用我所做的 Visual Studio 调试 mex 文件,并将错误消息放在下面。此时我知道问题是 pyd 的内存问题以及与 MATLAB 的一些冲突。有趣的是,我可以在 MATLAB 中使用系统命令来启动 python 中使用 numpy 的进程并且不会产生错误。我将粘贴在来自 MATLAB 的错误消息下方,然后是 Visual Studio 中导致 MATLAB 崩溃的进程的 DEBUG 输出。但是,我没有粘贴整个内容,因为第一次机会异常(exception)的列表很长。有什么解决这个集成问题的建议吗?

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: Microsoft Windows 7
Processor ID : x86 Family 6 Model 7 Stepping 10, GenuineIntel
Virtual Machine : Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode
Window System : Version 6.1 (Build 7600)

Fault Count: 1

Abnormal termination:
Segmentation violation

Register State (from fault):
EAX = 00000001 EBX = 69c38c20
ECX = 00000001 EDX = 24ae1da8
ESP = 0088af0c EBP = 0088af44
ESI = 69c38c20 EDI = 24ae1da0

EIP = 69b93d31 EFL = 00010202

CS = 0000001b DS = 00000023 SS = 00000023
ES = 00000023 FS = 0000003b GS = 00000000


Stack Trace (from fault):
[ 0] 0x69b93d31 C:/Python26/Lib/site-packages/numpy/core/multiarray.pyd+00081201 ( ???+000000 )
[ 1] 0x69bfead4 C:/Python26/Lib/site-packages/numpy/core/multiarray.pyd+00518868 ( ???+000000 )
[ 2] 0x69c08039 C:/Python26/Lib/site-packages/numpy/core/multiarray.pyd+00557113 ( ???+000000 )
[ 3] 0x08692b09 C:/Python26/python26.dll+00076553 ( PyEval_EvalFrameEx+007833 )
[ 4] 0x08690adf C:/Python26/python26.dll+00068319 ( PyEval_EvalCodeEx+002255 )



This error was detected while a MEX-file was running. If the MEX-file
is not an official MathWorks function, please examine its source code
for errors. Please consult the External Interfaces Guide for information
on debugging MEX-files.

If this problem is reproducible, please submit a Service Request via:
http://www.mathworks.com/support/contact_us/

A technical support engineer might contact you with further information.

Thank you for your help.

Visual Studios 调试器的输出

First-chance exception at 0x0c12c128 in MATLAB.exe: 0xC0000005: Access violation reading location 0x00000004.
First-chance exception at 0x0c12c128 in MATLAB.exe: 0xC0000005: Access violation reading location 0x00000004.
First-chance exception at 0x0c12c128 in MATLAB.exe: 0xC0000005: Access violation reading location 0x00000004.
First-chance exception at 0x751d9673 in MATLAB.exe: Microsoft C++ exception: jitCgFailedException at memory location 0x00c3e210..
First-chance exception at 0x751d9673 in MATLAB.exe: Microsoft C++ exception: jitCgFailedException at memory location 0x00c3e400..
First-chance exception at 0x69b93d31 in MATLAB.exe: 0xC0000005: Access violation writing location 0x00000001.
> throw_segv_longjmp_seh_filter()
throw_segv_longjmp_seh_filter(): invoking THROW_SEGV_LONGJMP SEH filter
> mnUnhandledWindowsExceptionFilter()
MATLAB.exe has triggered a breakpoint

最佳答案

尝试从 Python 方面解决问题:Python 是一种很好的粘合语言,我建议您让 Python 运行您的 Matlab 和 C 程序。 Python有:

  1. NumPy
  2. PyLab
  3. Matplotlib
  4. IPython

因此,该组合是几乎所有现有 Matlab 模块的良好替代方案。

关于python - 在 MATLAB 中嵌入 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7811387/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com