You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenMDAO组件输出能否为数组/矩阵?输出大小相关疑问

OpenMDAO数组/矩阵类型输出参数配置方法

你遇到的ValueError: cannot reshape array of size 36 into shape (1,)报错,核心原因是OpenMDAO的变量默认是标量(shape为(1,)),如果没有显式指定输出的形状,系统会按标量校验赋值的内容,你传入6×6共36个元素的矩阵自然会触发形状不匹配错误。

只要在组件的setup方法中定义输出变量时,显式指定shape参数匹配你需要的矩阵维度即可,完全不需要拆分36个单独的元素传递,示例实现如下:

import numpy as np
import openmdao.api as om

class MatrixOutputComp(om.ExplicitComponent):
    def setup(self):
        # 显式声明输出M为6×6的矩阵
        self.add_output('M', shape=(6, 6))
        # 也可以直接传入初始值,系统会自动识别形状
        # self.add_output('M', val=np.ones((6, 6)))
    
    def compute(self, inputs, outputs):
        # 直接赋值6×6矩阵即可,不会再报形状错误
        M = np.ones([6, 6])
        outputs['M'] = M

# 测试验证
if __name__ == "__main__":
    prob = om.Problem()
    prob.model.add_subsystem('matrix_comp', MatrixOutputComp(), promotes=['*'])
    prob.setup()
    prob.run_model()
    # 打印输出验证
    print(prob.get_val('M'))

额外说明:

  • 该方法对输入变量同样生效:如果需要传入数组/矩阵类型的输入参数,在add_input时也显式指定对应shape即可
  • 支持任意维度的数组:不管是一维列表、二维矩阵还是更高维度的张量,只要shape参数和实际赋值的维度匹配即可正常使用

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:24:03