Simulink中coder.extrinsic调用Python模块如何初始化复杂数据类型
解决方案
针对coder.extrinsic调用返回非MATLAB原生内置类型(如Python模块对象)的场景,需要用coder.opaque声明变量为不透明对象类型,无需预先赋值内置类型值,示例修改后的代码如下:
% foo(x)返回双精度标量 coder.extrinsic('foo', 'py.importlib.import_module'); y = 0; % 将y定义为双精度标量 y = foo(x); % 运行正常 np = coder.opaque('pyobject'); % 声明np为Python对象类型的不透明变量 np = py.importlib.import_module('numpy');
后续使用注意事项
- 声明为
pyobject类型的不透明变量,只能在标记为coder.extrinsic的函数之间传递,不能直接在Matlab System模块的代码中直接调用它的属性、方法,否则代码生成阶段会报错。 - 如果需要使用numpy模块的功能,建议把所有Python相关操作封装到一个独立的MATLAB函数中,将该函数整体标记为
coder.extrinsic,函数内部直接操作Python对象,最终只返回MATLAB原生支持的数值、数组等类型给Simulink链路使用。 - 该方案仅支持Simulink仿真、生成带MATLAB Engine依赖的代码场景,无法生成完全独立的嵌入式C代码,因为Python解释器无法被直接编译到C代码中。
内容的提问来源于stack exchange,提问作者Hawkansson
相关产品推荐
相关产品推荐

