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.]]