Vector-Vector Outer Product using Einsum with Sparse PartialsΒΆ
This is an example of how to properly use the einsum function to compute a vector-vector outer product while using sparse partial derivatives.
from openmdao.api import Problem
import numpy as np
from omtools.api import Group
import omtools.api as ot
class ExampleOuterVectorVectorSparse(Group):
def setup(self):
a = np.arange(4)
vec = self.declare_input('a', val=a)
self.register_output(
'einsum_outer1_sparse_derivs',
ot.einsum(
vec,
vec,
subscripts='i,j->ij',
partial_format='sparse',
))
prob = Problem()
prob.model = ExampleOuterVectorVectorSparse()
prob.setup(force_alloc_complex=True)
prob.run_model()
print('a', prob['a'].shape)
print(prob['a'])
print('einsum_outer1_sparse_derivs', prob['einsum_outer1_sparse_derivs'].shape)
print(prob['einsum_outer1_sparse_derivs'])
a (4,)
[0. 1. 2. 3.]
einsum_outer1_sparse_derivs (4, 4)
[[0. 0. 0. 0.]
[0. 1. 2. 3.]
[0. 2. 4. 6.]
[0. 3. 6. 9.]]