Inner Product between Two TensorsΒΆ

This is an example of how to use the omtools inner function to compute the inner product between two tensors.

from openmdao.api import Problem
from omtools.api import Group
import omtools.api as ot
import numpy as np


class ExampleTensorTensor(Group):
    def setup(self):

        m = 3
        n = 4
        p = 5

        # Shape of the tensors
        ten_shape = (m, n, p)

        # Number of elements in the tensors
        num_ten_elements = np.prod(ten_shape)

        # Values for the two tensors
        ten1 = np.arange(num_ten_elements).reshape(ten_shape)
        ten2 = np.arange(num_ten_elements,
                         2 * num_ten_elements).reshape(ten_shape)

        # Adding tensors to omtools
        ten1 = self.declare_input('ten1', val=ten1)
        ten2 = self.declare_input('ten2', val=ten2)

        # Tensor-Tensor Inner Product specifying the first and last axes
        self.register_output(
            'TenTenInner',
            ot.inner(ten1, ten2, axes=([0, 2], [0, 2])),
        )


prob = Problem()
prob.model = ExampleTensorTensor()
prob.setup(force_alloc_complex=True)
prob.run_model()

print('ten1', prob['ten1'].shape)
print(prob['ten1'])
print('ten2', prob['ten2'].shape)
print(prob['ten2'])
print('TenTenInner', prob['TenTenInner'].shape)
print(prob['TenTenInner'])
ten1 (3, 4, 5)
[[[ 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.]
  [25. 26. 27. 28. 29.]
  [30. 31. 32. 33. 34.]
  [35. 36. 37. 38. 39.]]

 [[40. 41. 42. 43. 44.]
  [45. 46. 47. 48. 49.]
  [50. 51. 52. 53. 54.]
  [55. 56. 57. 58. 59.]]]
ten2 (3, 4, 5)
[[[ 60.  61.  62.  63.  64.]
  [ 65.  66.  67.  68.  69.]
  [ 70.  71.  72.  73.  74.]
  [ 75.  76.  77.  78.  79.]]

 [[ 80.  81.  82.  83.  84.]
  [ 85.  86.  87.  88.  89.]
  [ 90.  91.  92.  93.  94.]
  [ 95.  96.  97.  98.  99.]]

 [[100. 101. 102. 103. 104.]
  [105. 106. 107. 108. 109.]
  [110. 111. 112. 113. 114.]
  [115. 116. 117. 118. 119.]]]
TenTenInner (4, 4)
[[31090. 32740. 34390. 36040.]
 [37240. 39265. 41290. 43315.]
 [43390. 45790. 48190. 50590.]
 [49540. 52315. 55090. 57865.]]