दिलचस्प पोस्ट
एक संपत्ति द्वारा ऑब्जेक्ट की सरणी सूची कैसे सॉर्ट करें? विभिन्न एंड्रॉइड डिवाइस पर उपलब्ध ओपनजीएल एक्सटेंशन Servlets और Ajax का उपयोग कैसे करें? परिणामस्वरूप अपवाद – परिणाम सेट की शुरुआत से पहले जब मैं एक वैल () का उपयोग करके एक मान का मूल्य सेट करता हूँ तो jQuery परिवर्तन ईवेंट क्यों ट्रिगर नहीं करता? फ्लोट / डबल वैल्यू निकालें किसी पद्धति के भीतर से कॉलिंग विधि नाम प्राप्त करना IPhone ऐप में कस्टम फोंट का प्रयोग करें क्या मैं प्रतिबिंब के माध्यम से सी # में निजी रीडोनली फ़ील्ड बदल सकता हूँ? एसटीडी :: गेटलाइन () एक फॉर्मेटेड निष्कर्षण के बाद इनपुट को छोड़ क्यों देता है? Ggplot2 के लिए मैन्युअल रूप से समूह रंग सेट करना क्या जावा के जेडीके में एक समवर्ती सूची है? Angular2, * ngIf और स्थानीय टेम्पलेट चर टेक्सटेरा में लाइनों की संख्या को सीमित करना ubuntu 12.04 पर नोडजे बनाम नोड

MATLAB से अजगर समारोह को कॉल करें

मुझे MATLAB से एक पायथन फ़ंक्शन कॉल करना होगा। मैं यह कैसे कर सकता हूँ?

वेब के समाधान से एकत्रित समाधान "MATLAB से अजगर समारोह को कॉल करें"

मेरे सिस्टम पर मेरे पास एक समान आवश्यकता थी और यह मेरा समाधान था:

MATLAB में एक समारोह perl.m है, जो आपको MATLAB से perl स्क्रिप्ट कॉल करने की अनुमति देता है। आप जिस संस्करण का उपयोग कर रहे हैं उसके आधार पर यह कहीं न कहीं स्थित हो जाएगा

C:\Program Files\MATLAB\R2008a\toolbox\matlab\general\perl.m 

Python.m नामक प्रति बनाएँ, एक त्वरित खोज और अजगर के साथ पर्ल की प्रतिस्थापित करें, यह आपके द्वारा अजगर की स्थापना को इंगित करने के लिए सेट की गई कमांड पथ को दोबारा जांचें। अब आपको MATLAB से अजगर स्क्रिप्ट चलाने में सक्षम होना चाहिए।

उदाहरण

अजगर में एक साधारण स्क्वायर फ़ंक्शन "sqd.py" के रूप में सहेजा गया, स्वाभाविक रूप से अगर मैं यह ठीक से कर रहा था तो इनपुट इनपुटों, वैध संख्या आदि के परीक्षण में मेरे पास कुछ चेक होंगे।

 import sys def squared(x): y = x * x return y if __name__ == '__main__': x = float(sys.argv[1]) sys.stdout.write(str(squared(x))) 

फिर MATLAB में

 >> r=python('sqd.py','3.5') r = 12.25 >> r=python('sqd.py','5') r = 25.0 >> 

MATLAB से वास्तव में पाइथन को कॉल करने के लिए इस मेक्स फ़ाइल की कोशिश करें, अन्यथा इसका सुझाव न दें। यह काफी अच्छा एकीकरण प्रदान करता है: http://algoholic.eu/matpy/

आप आसानी से ऐसा कुछ कर सकते हैं:

 [X,Y]=meshgrid(-10:0.1:10,-10:0.1:10); Z=sin(X)+cos(Y); py_export('X','Y','Z') stmt = sprintf(['import matplotlib\n' ... 'matplotlib.use(''Qt4Agg'')\n' ... 'import matplotlib.pyplot as plt\n' ... 'from mpl_toolkits.mplot3d import axes3d\n' ... 'f=plt.figure()\n' ... 'ax=f.gca(projection=''3d'')\n' ... 'cset=ax.plot_surface(X,Y,Z)\n' ... 'ax.clabel(cset,fontsize=9,inline=1)\n' ... 'plt.show()']); py('eval', stmt); 

Matlab 2014b अजगर पुस्तकालयों के साथ सीधे matlab से कहा जा सकता है उपसर्ग py. सभी पैकेट नामों में जोड़ा गया है:

 wrapped = py.textwrap.wrap(T); % calls textwrap.wrap in python 

आप सी प्रोग्राम में अपनी पायथन स्क्रिप्ट को एम्बेड कर सकते हैं और फिर मैसेज सी प्रोग्राम को MATLAB के साथ जोड़ सकते हैं, लेकिन परिणाम की तुलना में फाईल को डंप करने की तुलना में यह बहुत काम हो सकता है

आप मैटकैट फ़ंक्शंस Py Python में PyMat का उपयोग कर कॉल कर सकते हैं। इसके अलावा, SciPy में कई MATLAB डुप्लिकेट फ़ंक्शन हैं।

लेकिन अगर आपको MATLAB से पायथन स्क्रिप्ट चलाने की आवश्यकता है, तो आप स्क्रिप्ट को चलाने के लिए सिस्टम कमांड चलाने की कोशिश कर सकते हैं और परिणाम को फाइल में संग्रहीत कर सकते हैं और इसे बाद में MATLAB में पढ़ सकते हैं।

@ डीगोरिसन के रूप में, ज्योथन सबसे आसान समाधान है

बस जिप्टन को होमपेज से स्थापित करें।

फिर:

 javaaddpath('/path-to-your-jython-installation/jython.jar') import org.python.util.PythonInterpreter; python = PythonInterpreter; %# takes a long time to load! python.exec('import some_module'); python.exec('result = some_module.run_something()'); result = python.get('result'); 

कुछ उदाहरणों के लिए दस्तावेज़ीकरण देखें।

सावधान: मैंने कभी जेथॉन के साथ काम नहीं किया है और ऐसा लगता है कि मानक पुस्तकालय सीपीथाथन से पता हो सकता है कि येथाथन में पूरी तरह लागू नहीं है!

मैंने जिन छोटे उदाहरणों का परीक्षण किया था ठीक काम किया है, लेकिन आप पा सकते हैं कि आपको अपनी पायथन कोड निर्देशिका को sys.path करना sys.path

ऐसा करने का सबसे आसान तरीका है MATLAB सिस्टम फ़ंक्शन का उपयोग करना।

तो मूलतः, आप MATLAB पर एक पायथन फ़ंक्शन निष्पादित करेंगे जैसा कि आप कमांड प्रॉम्प्ट (विंडोज), या शेल (लिनक्स) पर करेंगे:

 system('python pythonfile.py') 

उपरोक्त केवल एक पायथन फाइल चलाने के लिए है यदि आप एक पायथन फ़ंक्शन (और इसे कुछ तर्क दें) को चलाने के लिए चाहते हैं, तो आपको कुछ की आवश्यकता होगी:

 system('python pythonfile.py argument') 

एक ठोस उदाहरण के लिए, एड्रियन के इस प्रश्न के उत्तर में पायथन कोड लेते हैं, और इसे एक पायथन फाइल में test.py , जो कि test.py । फिर इस फ़ाइल को अपनी MATLAB निर्देशिका में रखें और MATLAB पर निम्नलिखित कमांड चलाएं:

 system('python test.py 2') 

और आप अपने आउटपुट के रूप में 4 या 2 ^ 2 प्राप्त करेंगे।

नोट: MATLAB वर्तमान मैटैब निर्देशिका में जो भी आप Python फ़ाइल system आदेश के साथ निर्दिष्ट के लिए देखता है।

शायद आपकी समस्या को हल करने का सबसे आसान तरीका है, क्योंकि आप अपनी बोली लगाने के लिए MATLAB में मौजूदा फ़ंक्शन का उपयोग करते हैं।

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

मैंने perl.m को perl.m को अनुकूलित किया है और इसे दूसरों के लिए संदर्भ के लिए संलग्न किया है, लेकिन मुझे पायथन स्क्रिप्ट से कोई आउटपुट MATLAB चर में लौटाया नहीं जा सकता है 🙁

यहां मेरी एम-फाइल है; नोट मैं सीधे अपने पायथन फ़ोल्डर, C:\python27_64 को इंगित करता C:\python27_64 , मेरे कोड में, और यह आपके सिस्टम में बदल जाएगा।

 function [result status] = python(varargin) cmdString = ''; for i = 1:nargin thisArg = varargin{i}; if isempty(thisArg) || ~ischar(thisArg) error('MATLAB:python:InputsMustBeStrings', 'All input arguments must be valid strings.'); end if i==1 if exist(thisArg, 'file')==2 if isempty(dir(thisArg)) thisArg = which(thisArg); end else error('MATLAB:python:FileNotFound', 'Unable to find Python file: %s', thisArg); end end if any(thisArg == ' ') thisArg = ['"', thisArg, '"']; end cmdString = [cmdString, ' ', thisArg]; end errTxtNoPython = 'Unable to find Python executable.'; if isempty(cmdString) error('MATLAB:python:NoPythonCommand', 'No python command specified'); elseif ispc pythonCmd = 'C:\python27_64'; cmdString = ['python' cmdString]; pythonCmd = ['set PATH=',pythonCmd, ';%PATH%&' cmdString]; [status, result] = dos(pythonCmd) else [status ignore] = unix('which python'); %#ok if (status == 0) cmdString = ['python', cmdString]; [status, result] = unix(cmdString); else error('MATLAB:python:NoExecutable', errTxtNoPython); end end if nargout < 2 && status~=0 error('MATLAB:python:ExecutionError', ... 'System error: %sCommand executed: %s', result, cmdString); end 

संपादित करें:

मेरी समस्या को मूल perl.m काम करता है, जो कि पर्ल को अपडेट करके मैटलैब फ़ोल्डर में पर्ल इंस्टालेशन को इंगित करता है, फिर पर्ल को कॉल करता है। मेरे पायथन को स्थापित करने के लिए अंक ऊपर कार्य। जब मैंने अपना function.py फ़ाइल कहा था, यह एक अलग निर्देशिका में था और उस निर्देशिका में अन्य फाइलों को बुलाया जाता था ये जहां पाथ में परिलक्षित नहीं होता है, और मुझे अपने पायथन फ़ाइलों को अपने पायथन वितरण में आसान करना पड़ा।

MATLAB के system() फ़ंक्शन के बारे में थोड़ा ज्ञात (और थोड़ा दस्तावेज ) तथ्य: यूनिक्सॉइड सिस्टम पर MATLAB शुरू होने के समय वातावरण में SHELL या MATLAB_SHELL में जो भी दुभाषिया दिया जाता है, उसका उपयोग करता है। तो अगर आप MATLAB को शुरू करते हैं तो

 SHELL='/usr/bin/python' matlab 

किसी भी बाद system() कॉल एक डिफ़ॉल्ट के रूप में अपने डिफ़ॉल्ट शेल के बजाय अजगर का उपयोग करेगा

Matlab 2014b से शुरू, अजगर कार्यों को सीधे कहा जा सकता है। उपसर्ग पिन, फिर मॉड्यूल नाम का उपयोग करें, और अंत में इस प्रकार फ़ंक्शन नाम का प्रयोग करें:

 result = py.module_name.function_name(parameter1); 

यदि आप पायथन स्क्रिप्ट की तुलना में एक अलग कार्य निर्देशिका में हैं, तो Matlab से कॉल करते समय स्क्रिप्ट को पाइथन खोज पथ में जोड़ना सुनिश्चित करें।

मैं पोस्ट की गई वीडियो में अधिक विवरण देखें

यह "सुरंग" फ़ंक्शंस को पायथन से MATLAB के लिए उपयुक्त विधि मानता है :

http://code.google.com/p/python-matlab-wormholes/

बड़ा फायदा यह है कि आप इसके साथ ndarrays को संभाल सकते हैं, जो प्रोग्राम के मानक आउटपुट से संभव नहीं है, जैसा कि पहले सुझाव दिया गया है। (कृपया मुझे सही करें, अगर आपको लगता है कि यह गलत है – यह मुझे बहुत परेशानी बचाएगा :-))

चूंकि अजगर एक बेहतर गोंद भाषा है, इसलिए आपके प्रोग्राम के MATLAB भाग को वाइस-वायरस के बजाय पायथन से कॉल करना आसान हो सकता है।

म्लाब्राप देखें