Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在simulink中使用python返回numpy.array_Python_Matlab_Numpy_Simulink - Fatal编程技术网

如何在simulink中使用python返回numpy.array

如何在simulink中使用python返回numpy.array,python,matlab,numpy,simulink,Python,Matlab,Numpy,Simulink,我用python构建了一个神经网络控制器,并希望使用python函数控制simulink模型。python函数的输入和输出是“numpy.array”。输出形状为[4,1]。 我使用“matlab函数”在simulink中调用python函数。matlab函数的代码如下所示: function [u1, u2, u3, u4] = fcn(data_in) coder.extrinsic('py.controller.multi_output') out = 0; out = py.contro

我用python构建了一个神经网络控制器,并希望使用python函数控制simulink模型。python函数的输入和输出是“numpy.array”。输出形状为[4,1]。 我使用“matlab函数”在simulink中调用python函数。matlab函数的代码如下所示:

function [u1, u2, u3, u4] = fcn(data_in)
coder.extrinsic('py.controller.multi_output')
out = 0;
out = py.controller.multi_output(data_in);
u1 = out(1);
u2 = out(2);
u3 = out(3);
u5 = out(4);
“py.controller.multi_output(data_in)”在matlab中运行良好,并返回ndarray:

out = py.controller.multi_output(data_in)
out = 

  Python ndarray:

     1
     2
     3
     4
我可以将ndarray转换为双倍。 但它在simulink中不起作用:

An error occurred while running the simulation and the simulation was terminated
Caused by:
MATLAB expression '<output of py.controller.multi_output>' is not numeric.
运行模拟时出错,模拟已终止
原因:
MATLAB表达式“”不是数字。

有人告诉我如何修复它吗?

我建议创建一个单独的MATLAB函数(myfcn.m),该函数调用 “py.controller.multi_output”,并执行MATLAB双数组和Python的Ndarray之间的转换

然后,您可以在Simulink内的MATLAB函数块中将该函数声明为外部函数,并简单地调用它

问题基本上是MATLAB函数块中的任何内容(除了对外部函数的调用)都需要由MATLAB子集支持才能生成代码。Ndarray不受支持,因此它们可能不会在MATLAB函数块本身内部使用,但也可以在外部函数内部使用,只要该函数具有Simulink(MATLAB代码生成子集)中支持的输入/输出参数