You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

在Jupyter Notebook中调用MATLAB代码无法输出结果的问题咨询

解决Jupyter Notebook中调用MATLAB脚本无输出的问题

针对你遇到的在Jupyter里调用MATLAB脚本没输出,但常规Python环境正常的问题,这是MATLAB R2017a版本的Engine对Jupyter输出流适配不完善导致的,给你两个可行的解决办法:

方法1:修改MATLAB脚本为函数,通过返回值获取结果

最稳妥的方式是把原脚本改成带返回值的函数,这样Python可以主动接收计算结果,不需要依赖MATLAB的输出流。

修改后的triarea.m代码:

function a = triarea()
    % 计算三角形面积的函数
    b = 5;
    h = 3;
    a = 0.5*(b.*h);
end

对应的Python调用代码:

import matlab.engine

# 启动MATLAB引擎
eng = matlab.engine.start_matlab()
# 调用函数并获取返回值
area_result = eng.triarea()
# 在Jupyter中打印结果
print(f"a = {area_result:.4f}")

运行这段代码就能在Jupyter里看到a = 7.5000的输出了。

方法2:用MATLAB的evalc函数捕获输出(无需修改原脚本)

如果不想改动原MATLAB脚本,可以借助MATLAB内置的evalc函数,它能捕获脚本执行过程中的所有输出内容,再由Python打印出来。

Python调用代码:

import matlab.engine

eng = matlab.engine.start_matlab()
# 用evalc执行脚本并捕获输出
output_content = eng.evalc('triarea')
# 打印捕获到的内容
print(output_content)

执行后会直接输出MATLAB脚本里的计算结果,和你在常规Python环境里看到的一致。

为什么之前的stdout重定向没用?

MATLAB R2017a的Engine for Python对Jupyter的自定义输出流支持有限,Jupyter的stdout和常规Python脚本的系统输出流不是同一个对象,所以用io.StringIO重定向无法捕获到MATLAB的输出。上面两种方法都是绕开这个适配问题的有效方案。

另外要确认你的Jupyter环境确实是安装了MATLAB Engine的Python3.5环境,避免因为环境不一致导致的问题。

内容的提问来源于stack exchange,提问作者sdrinz23

火山引擎 最新活动