从Python脚本调用MatLab函数:“没有足够的值来解包”ValueError

vlf7wbxs  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(206)

我从Python中调用了一个MatLab函数,该函数有3个输出。Python提供了ValueError: not enough values to unpack (expected 3, got 2)。下面是MatLab函数testCalledByPython

function [otpt1, otpt2, otpt3] = testCalledByPython(inpt)
otpt1 = rand(inpt, inpt);
otpt2 = magic(inpt);
otpt3 = zeros(inpt, inpt);

这是调用上述函数的Python脚本:

#!/usr/bin/env python3
import matlab.engine
eng = matlab.engine.start_matlab()
otpt1, otpt2, otpt3 = eng.testCalledByPython(2)

如果我将最后一行替换为otpt1, otpt2 = eng.testCalledByPython(2),它将运行,但输出为:

otpt1, otpt2
Out[5]: 
(matlab.double([0.8147236863931789,0.12698681629350606]),
 matlab.double([0.9057919370756192,0.9133758561390194]))

显然,这些都是错误的产出。我怎么才能解决它呢?

fhg3lkii

fhg3lkii1#

我自己找到了解决方案。它实际上在Matlab文档中得到了解释:https://uk.mathworks.com/help/matlab/matlab_external/call-matlab-functions-from-python.html
因此,在知道有3个输出的情况下,执行此操作的方法是将Python脚本的最后一行更改为:
otpt1, otpt2, otpt3 = eng.testCalledByPython(2, nargout = 3)

b09cbbtk

b09cbbtk2#

我也有类似的问题,但是我使用的是没有API引擎的运行时方法。
因此,知道我需要/期望来自该函数的x个输出后,我将nargout = x的参数添加到我想要使用或从中获得输出的函数中。

相关问题