【问题标题】:Running Python code from Matlab从 Matlab 运行 Python 代码
【发布时间】:2017-02-21 14:08:26
【问题描述】:

我非常感谢在 Matlab 中运行用 Python 3 编写的代码方面的帮助。 我的 Python 代码加载各种库并使用它们来执行微分方程的数值积分(对于 numpy 向量: e_array )。 我想从 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代码?

非常感谢您的帮助, 阿萨夫

【问题讨论】:

  • 你读过the documentation吗?
  • @Suever 我确实尝试过,但我不明白如何使用它。
  • Python接口的所有信息都是here。您能否向我们展示您尝试过但不起作用的代码?
  • @Suever 我还没有走得足够远来尝试实际实施一个实际的解决方案,因为我真的不知道从哪里开始。我希望我的特定代码的解决方案会很简单,并且我可以从中学习。

标签: python matlab numpy


【解决方案1】:

您可能需要从 Matlab 中退出 shell 以调用 python——在您在 shell 上运行的命令前加上 !

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 转义完成的[本质上是:“停止你正在做的事情并运行这个其他命令”],第二个的方法是让 matlab 保存数据,调用 python 然后 python 加载数据,做一些计算,保存一些新数据,然后 matlab 再次加载数据。绝对没有纯 python 解决方案。
  • 您是否有机会编写必须添加到 Python 和 Matlab 代码中以使其适用于我的示例的代码行,还是涉及/繁重?无论如何,感谢您的帮助!
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多