MATLAB

2011-10-18 10 views
31

में पायथन एम्बेड करना मैं MATLAB (7.12) में पायथन 2.6 को एम्बेड करने का प्रयास कर रहा हूं। मैं सी में लिखी गई एक मैक्स फ़ाइल के साथ एम्बेड करना चाहता था। यह स्केलर्स का उपयोग करके छोटे सरल उदाहरणों के लिए ठीक काम करता था। हालांकि, अगर मैम्बल दुर्घटनाग्रस्त हो तो Numpy (1.6.1) आयात किया जाता है। मैं वैसे भी कहते हैं क्योंकि मैं (.py)MATLAB

  1. अजगर मॉड्यूल में शामिल हैं numpy पुस्तकालयों लोड करने के लिए तरीके का एक संख्या की कोशिश की है:

    from numpy import * 
    
  2. MEX फ़ाइल में PyRun_SimpleString साथ

    :

    PyRun_SimpleString(“from numpy import *”); 
    
  3. Py_oBject_CallObject साथ numpy कार्यों कॉलिंग:

    pOut = PyObject_CallObject(pFunc, pArgs); 
    

मूल रूप से, मुझे लगा कि यह सी हालांकि में Numpy एम्बेड करने के साथ एक समस्या हो सकती है, Numpy ठीक जब साधारण सी फ़ाइलों को दृश्य के साथ साथ/एमडी (multithread) स्विच कमांड लाइन से संकलित किया गया है में एम्बेडेड काम करता है स्टूडियो 2005 सी कंपाइलर। इसके बाद, मैंने सोचा कि मैं/एमडी स्विच को शामिल करने के लिए MATLAB में मेक फ़ाइल को बदल दूंगा। ऐसी कोई किस्मत नहीं, mexopts.bat/एमडी स्विच के साथ संकलित करता है। MATLAB को क्रैश करने वाली चीज़ों को खोजने के लिए मैंने मैन्युअल रूप से Numpy init मॉड्यूल में लाइनों पर भी टिप्पणी की। ऐसा लगता है कि एक्सटेंशन पीडीडी के साथ किसी भी फाइल को लोड करना MATLAB क्रैश करता है। NumPy में लोड की गई ऐसी फ़ाइलों में से पहला multarray.pyd है। MATLAB प्रलेखन वर्णन करता है कि मैंने विजुअल स्टूडियो के साथ मैक्स फ़ाइलों को डीबग कैसे किया और मैंने नीचे त्रुटि संदेश रखा। इस बिंदु पर मुझे पता है कि समस्या पीईडी के साथ एक स्मृति समस्या है और MATLAB के साथ कुछ संघर्ष है। दिलचस्प बात यह है कि मैं मैटलैब में सिस्टम कमांड का उपयोग पाइथन में एक प्रक्रिया को बंद करने के लिए कर सकता हूं जो numpy का उपयोग करता है और कोई त्रुटि उत्पन्न नहीं होती है। मैं 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: 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. 

दृश्य स्टूडियो डीबगर से आउटपुट

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 
+1

यह शायद ट्रैक करने में आसान नहीं होगा। एक संभावित कारण कई सी रनटाइम लाइब्रेरी लोड करने के साथ कुछ संघर्ष है (एक पाइथन के लिए, एक Matlab के लिए, और संभवतः Numpy के लिए एक अलग)। पहला सुझाव: आप कहते हैं कि कोई भी .pyd फ़ाइल दुर्घटनाग्रस्त हो जाती है। क्या आपने उन लोगों को कोशिश की जो नम्पी से नहीं हैं? पहला कदम यह मूल भाग काम करना होगा, और केवल उस कदम के बाद काम करने के लिए नम्पी (जो अधिक जटिल है) बनाने की कोशिश कर रहा है।(यदि इसे हल करना बहुत अधिक काम है, तो योजना बी एक अलग प्रक्रिया में पायथन चलाने के लिए होगा, और मैटलैब के साथ संवाद करने के लिए कुछ आईपीसी विधि का उपयोग करें।) –

+0

अच्छा बिंदु। जैसा कि आप उल्लेख करते हैं, पहला विकल्प .pyd थ्रेड को जमीन पर ले रहा है। हालांकि, इसमें सी संकलित पीडीडी फाइलों की जांच और संभवतः पुनः लिखना शामिल हो सकता है। MATLAB में एक .mat फ़ाइल को सहेजने के लिए कोड की एक पंक्ति लेती है ('डेटा', 'चर', '-v7' सहेजें) (पाइथन के साथ संगतता के लिए पहले प्रारूप में सहेजा जाना चाहिए) और इसे पढ़ने के लिए कोड की एक पंक्ति पाइथन (परिवर्तनीय = loadmat ('data.mat')) Scipy पैकेज के साथ (scipy.io आयात loadmat से)। इसके अलावा, पाइथन में MATLAB फ़ंक्शन को लपेटने के बारे में और अधिक लिखा गया है जो मैं कोशिश करूंगा। –

+1

मैं कहूंगा कि एम्बेडिंग से बचने का बेहतर कोर्स है। कुछ साल पहले मैंने एक एमईएक्स फ़ाइल लिखी जो मैटलैब के अंदर पाइथन को एम्बेड करता है, और सब कुछ काम कर रहा है। (यह यूनिक्स पर था, हालांकि, google "पायथनकॉल"।) वहाँ बाइनरी पायथन मॉड्यूल (.pyd/.so) लोड करने के साथ भी समस्याएं थीं, लेकिन कुछ कामों के साथ उनको हल किया जा सकता था। हालांकि, यह अगले Matlab संस्करण --- समग्र रूप से काम नहीं करता था, एक सुंदर नाजुक सेटअप की तरह महसूस किया। –

उत्तर

5

अजगर की ओर से समस्या दृष्टिकोण का प्रयास करें: अजगर, एक महान गोंद भाषा है मैं अजगर अपने Matlab और सी चलाने के लिए आप सुझाव है कार्यक्रम। अजगर है:

  1. Numpy
  2. PyLab
  3. matplotlib
  4. IPython

इस प्रकार, संयोजन लगभग किसी भी मौजूदा मैटलैब मॉड्यूल के लिए एक अच्छा विकल्प है।

+2

हालांकि नागरिक-रखा गया, यह सबसे गुमराह, बेकार और अपमानजनक प्रकार है प्रतिक्रिया का। अपमानजनक क्योंकि यह इस संभावना के लिए गैर-शून्य संभावना को असाइन करता है कि ओप ने इसके बारे में नहीं सोचा था। बेकार है क्योंकि यह "क्रॉस प्लेटफार्म मुद्दों, मालिकाना उपकरण श्रृंखला, प्रमाणीकरण द्वार, लाइसेंस प्राप्त प्रौद्योगिकियों, और विरासत कोडबेस और कार्यबल उपलब्धता के साथ मुद्दों के शीर्ष पर कड़े प्रदर्शन आवश्यकताओं" (जॉन कारमैक) को अनदेखा कर रहा है, जो शायद ओप का सामना कर रहा है। और गुमराह क्योंकि आप मदद करने के लिए मतलब है (लेकिन बस नहीं)। –