从Matlab运行Python代码
我真的很感谢能用Matlab从Python 3编写代码的一些帮助。 我的Python代码加载了各种库,并使用它们来执行微分方程的数值积分(对于numpy向量:e_array)。 Python的代码,我想从Matlab的调用为以下:从Matlab运行Python代码
from numba import jit
from scipy.integrate import quad
import numpy as np
@jit(nopython = True)
def integrand1(x,e,delta,r):
return (-2*np.sqrt(e*r)/np.pi)*(x/np.sqrt(1-x**2))/(1+(delta+2*x*np.sqrt(e*r))**2)
@jit(nopython = True)
def f1(e,delta,r):
return quad(integrand1, -1, 1, args=(e,delta,r))[0]
@jit(nopython = True)
def runge1(e,dtau,delta,r):
k1 = f1(e,delta,r)
k2 = f1((e+k1*dtau/2),delta,r)
k3 = f1((e+k2*dtau/2),delta,r)
k4 = f1((e+k3*dtau),delta,r)
return e + (dtau/6)*(k1+2*k2+2*k3+k4)
time_steps = 60
e = 10
dtau=1
r=1
delta=-1
e_array = np.zeros(time_steps)
time = np.zeros(time_steps)
for i in range(time_steps):
e_array[i] = e
time[i] = i*dtau
e = runge1(e,dtau,delta,r)
理想情况下,我想能够在Matlab调用该Python代码(pythoncode.py)就好像它是一个Matlab函数并为其提供参数:time_steps,e,dtau,r和delta。我会很高兴,看起来像这样的解决方案:
e_array = pythoncode.py(time_steps = 60, e = 10, dtau = 1, r = 1, delta = -1)
其中pythoncode.py被视为Matlab的函数,该函数表示参数,将它们送入Python代码,并返回了Matlab矢量e_array。
我想指出的是,有一些我希望能够从MATLAB调用几个额外的Python代码,我希望得到的如何从您对这个特定的Python代码的答案做到这一点的想法。 一个相关的问题涉及我在Python代码中使用的Python库:有没有一种方法可以“编译”Python代码,这样我就可以在Matlab中调用它,而无需在计算机上安装它使用的库(在numba库中)运行Matlab代码?
非常感谢帮助, 阿萨夫
你可能需要外壳逃逸出来Matlab在调用蟒蛇 - 前缀你会在外壳上与!
运行命令。
Matlab Shell Escape Functions建议保存一个mat文件,然后在python代码中打开它 - 请参阅Read .mat files in Python。
在编译python方面,你可以看看How to compile a Python file,看看是否有帮助你。
感谢@Dragon,我得到一个“你正在寻找的页面不存在。”给你第一个链接的消息。另外,我对编程非常陌生,不知道shell转义的含义,但我想指出的是,我期望在Matlab中运行Python代码,而不是相反。感谢您的帮助 –
修复了网址,谢谢! 如果你想从Matlab运行Python,Matlab必须将控制和函数需要的数据传递给Python。第一个是通过shell转义完成的[本质上:“停止你正在做的并且运行这个其他命令”),第二个应用程序是为了保存数据,调用python然后python加载数据,做一些计算,保存一些新的数据,然后matlab再次加载数据。这绝对不是纯粹的Python解决方案。 – Dragon
有没有可能编写人们为了让它适用于我的示例而需要添加到Python和Matlab代码中的代码行,或者它涉及到/重要吗?无论如何,感谢您的帮助! –
您是否阅读过[文档](https://www.mathworks.com/help/matlab/matlab_external/call-python-from-matlab.html)? – Suever
@Suever我已经尝试过,但我无法理解如何使用它。 –
Python界面上的所有信息都是[here](https://www.mathworks.com/help/matlab/call-python-libraries.html)。你能告诉我们你试过的代码不行吗? – Suever