在ver之后。3.13 src_indices被更改了,我在docs中找不到它。您能否共享一个用于连接大矩阵的较小部分的示例代码?
即源为5x5矩阵,目标为2x2,从2,3开始。
发布于 2022-02-05 14:08:39
我发现把连接看作切片是最容易的。我们通过切片表示法添加了om.slicer来处理索引。下面的示例连接5x5矩阵的2x2部分,从索引2、3开始
import openmdao.api as om
import numpy as np
print('Connecting a 2x2 submatrix of M to B')
p = om.Problem()
ivc = p.model.add_subsystem('ivc', om.IndepVarComp())
ivc.add_output('M', val=np.arange(25).reshape((5, 5)))
exec = p.model.add_subsystem('exec', om.ExecComp())
exec.add_expr('A = B', A={'shape': (2, 2)}, B={'shape': (2, 2)})
p.model.connect('ivc.M', 'exec.B', src_indices=om.slicer[2:4, 3:5])
p.setup()
p.run_model()
print('M')
print(p.get_val('ivc.M'))
print('A')
print(p.get_val('exec.A'))Connecting a 2x2 submatrix of M to B
M
[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]
[20. 21. 22. 23. 24.]]
A
[[13. 14.]
[18. 19.]]或者,例如,只将5x5矩阵中的行0、2、3连接到目标:
rint('Connecting rows 0, 2, and 3 of M to B')
p = om.Problem()
ivc = p.model.add_subsystem('ivc', om.IndepVarComp())
ivc.add_output('M', val=np.arange(25).reshape((5, 5)))
exec = p.model.add_subsystem('exec', om.ExecComp())
exec.add_expr('A = B', A={'shape': (3, 5)}, B={'shape': (3, 5)})
p.model.connect('ivc.M', 'exec.B', src_indices=om.slicer[[0, 2 ,3], :])
p.setup()
p.run_model()
print('M')
print(p.get_val('ivc.M'))
print('A')
print(p.get_val('exec.A'))Connecting rows 0, 2, and 3 of M to B
M
[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]
[20. 21. 22. 23. 24.]]
A
[[ 0. 1. 2. 3. 4.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]]虽然我们在一些并行化文档中讨论了这个特性,但是我们需要在连接文档中讨论这个特性,这是正确的。
https://stackoverflow.com/questions/70993067
复制相似问题