从 OpenMDAO 中的 numpy 数组传递单个标量 1.x
Passing a single scalar from numpy array in OpenMDAO 1.x
我有一个自变量 x,它是一个被视为 numpy 数组的向量。我希望能够根据向量中的其他值来约束该向量中的某些值。即 x_(k) < x_(k+1)。我试过:
root.add('p1',IndepVarComp('x',x=np.ones(10,dtype=float))
root.add('con',ExecComp('c0=x[1]-x[0]')
root.connect('p1.x','con.x')
这给了我关于变量不存在和试图连接到浮点数的数组的错误。将特定值从输出数组连接到定标器输入的正确语法是什么?
您键入的代码中缺少几个括号,但这些必须来自将其转录到此处。您缺少的主要内容是 ExecComp
的一个额外参数,以便它知道如何调整传入 x.
的大小
import numpy as np
from openmdao.api import Problem, Group, IndepVarComp, ExecComp
prob = Problem()
prob.root = root = Group()
root.add('p1', IndepVarComp('x', np.array([3, 7, 5], dtype=float)))
root.add('con', ExecComp('co = x[1] - x[0]', x=np.zeros(3, )))
root.connect('p1.x','con.x')
prob.setup()
prob.run()
print('con', prob['con.co'])
当我运行这个时,我得到了预期的输出:
##############################################
Setup: Checking root problem for potential issues...
No recorders have been specified, so no data will be saved.
Setup: Check of root problem complete.
##############################################
('con', 4.0)
另一种方法是使用缩放器表达式,然后从 'p1.x':
的单个索引发出连接
root.add('con2', ExecComp('co = b - a'))
root.connect('p1.x', 'con2.a', src_indices=[0])
root.connect('p1.x', 'con2.b', src_indices=[1])
我有一个自变量 x,它是一个被视为 numpy 数组的向量。我希望能够根据向量中的其他值来约束该向量中的某些值。即 x_(k) < x_(k+1)。我试过:
root.add('p1',IndepVarComp('x',x=np.ones(10,dtype=float))
root.add('con',ExecComp('c0=x[1]-x[0]')
root.connect('p1.x','con.x')
这给了我关于变量不存在和试图连接到浮点数的数组的错误。将特定值从输出数组连接到定标器输入的正确语法是什么?
您键入的代码中缺少几个括号,但这些必须来自将其转录到此处。您缺少的主要内容是 ExecComp
的一个额外参数,以便它知道如何调整传入 x.
import numpy as np
from openmdao.api import Problem, Group, IndepVarComp, ExecComp
prob = Problem()
prob.root = root = Group()
root.add('p1', IndepVarComp('x', np.array([3, 7, 5], dtype=float)))
root.add('con', ExecComp('co = x[1] - x[0]', x=np.zeros(3, )))
root.connect('p1.x','con.x')
prob.setup()
prob.run()
print('con', prob['con.co'])
当我运行这个时,我得到了预期的输出:
##############################################
Setup: Checking root problem for potential issues...
No recorders have been specified, so no data will be saved.
Setup: Check of root problem complete.
##############################################
('con', 4.0)
另一种方法是使用缩放器表达式,然后从 'p1.x':
的单个索引发出连接root.add('con2', ExecComp('co = b - a'))
root.connect('p1.x', 'con2.a', src_indices=[0])
root.connect('p1.x', 'con2.b', src_indices=[1])