还在纠结用MATLAB还是Python?其实可以两个都要。2026年,数据科学和工程计算越来越复杂,单一工具常常不够用。MATLAB擅长数值计算和矩阵运算,Python有海量开源库和最新算法。两者结合起来,工作效率能翻倍。下面教你3步实现MATLAB调用Python,直接在MATLAB里跑Python代码。
想调用Python,先得让MATLAB知道你家Python装在哪。用pyversion命令检查:
pyversion如果配置正确,会显示类似这样的信息:
version: '3.10'executable: 'C:\Python310\python.exe'library: 'C:\Python310\python310.dll'isloaded: 0isloaded为0表示Python还没加载,执行一句Python代码就能载入:
py.print('Hello')pyversion这时候isloaded就变成1了。
报错了怎么办? 如果pyversion返回空,说明MATLAB没找到Python。两种解决办法:
我用Anaconda的用户注意:虚拟环境路径也能这样指定。比如pyversion('D:\Anaconda3\envs\tf\python.exe'),实测有效。

环境通了,先试试最直接的玩法——在MATLAB命令行里敲Python语句:
py.print('Hello, Python!')输出:Hello, Python!
查看Python的sys.path:
py.sys.path把MATLAB数组转成Python列表:
py.list([1,2,3])返回:[1.0, 2.0, 3.0]
是不是跟写Python一样顺滑?注意MATLAB的double型数字传过去会变成Python的float。
这才是重头戏。假设你写了一个Python脚本myfun.py,内容如下:
def test(): print('Hello, Matlab!')def add(a, b): return a + b把MATLAB当前目录切换到myfun.py所在文件夹,然后直接调:
py.myfun.test()输出:Hello, Matlab!
result = py.myfun.add(3, 5)
result的值是8(注意这是Python int,但MATLAB会自动转成double)。
坑:修改Python代码后MATLAB不生效怎么办? MATLAB会把Python模块缓存起来。改了.py文件,需要强制重载:
clear classes
mod = py.importlib.import_module('myfun');
py.importlib.reload(mod);
执行完这3行,新代码就生效了。我刚开始不知道这个,改了半天函数死活没反应,差点砸电脑。

调用Python类 写一个简单的计数器类myclass.py:
class myclass():
def __init__(self):
self.count = 0
def add(self):
self.count += 1
print('count =', self.count)
MATLAB里这样用:
obj = py.myclass.myclass();
for i = 1:5
obj.add();
end
输出:
count = 1
count = 2
count = 3
count = 4
count = 5
来回传数据,类型搞不对容易翻车。记住下面几条就行。
MATLAB → Python
| MATLAB类型 | Python接收类型 |
|---|---|
| double标量 | float |
| int32标量 | int |
| 逻辑标量 | bool |
| 字符串 | str |
| 数值数组 | array.array('d') |
举个例子,MATLAB里[1,2,3]传过去变成array.array('d', [1.0, 2.0, 3.0])。如果你习惯用numpy,可以在Python里转一下:
import numpy as np
def my_func(arr):
np_arr = np.array(arr) # array.array转numpy数组
return np_arr.mean()
Python → MATLAB
Python返回的基本类型(int、float、bool、str)MATLAB能直接认。但返回list、dict、自定义对象就需要手动转。
比如Python函数返回字符串:
def get_msg():
return 'Hello, Matlab!'
MATLAB里收到的是Python str对象,直接显示没问题,但要做字符串操作就得转:
msg = py.myfun.get_msg();
msg_str = string(msg); % 转成MATLAB string
msg_char = char(msg); % 或者转成字符数组
返回数组 推荐让Python返回array.array,MATLAB收到后直接double()转换:
import arraydef get_array(): return array.array('d', [1, 2, 3, 4])a = double(py.myfun.get_array())a就是[1 2 3 4],完美。
如果Python那边已经是numpy数组,先转成array.array再返回。别直接传numpy数组,MATLAB认起来很麻烦。

MATLAB没有现成的免费股票数据接口?借Python的轮子。
先写一个Python脚本stock.py:
import yfinance as yfdef get_price(symbol, period='1d'): ticker = yf.Ticker(symbol) hist = ticker.history(period=period) return hist['Close'].values.tolist()MATLAB里调用:
prices = py.stock.get_price('AAPL', '5d');price_array = double(py.array.array('d', prices));plot(price_array)3行代码画出苹果公司最近5天的收盘价曲线。没有MATLAB的Datafeed工具箱?不存在的。
最后总结一下 MATLAB调用Python分三步:先pyversion检查环境,再py.模块名.函数名直接调用,注意数据类型的自动转换和手动处理。修改Python代码后记得reload。这套方法在2026年依然管用,让你同时拥有MATLAB的矩阵运算优势和Python的生态灵活性。下次遇到MATLAB没有现成函数的场景,别自己造轮子了,试试把Python叫过来帮忙。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。