Axiswise Pnorm ComputationΒΆ
This is an example of the Pnorm function being used to compute the Pnorm of a tensor. Since no axis is specified, the Pnorm is computed using all of the values in the tensor, and it returns a single value.
from openmdao.api import Problem
from omtools.api import Group
import omtools.api as ot
import numpy as np
class ExampleAxisWise(Group):
def setup(self):
# Shape of the tensor
shape = (2, 3, 4, 5)
# Number of elements in the tensor
num_of_elements = np.prod(shape)
# Creating a numpy tensor with the desired shape and size
tensor = np.arange(num_of_elements).reshape(shape)
# Declaring in1 as input tensor
in1 = self.declare_input('in1', val=tensor)
# Computing the 6-norm of in1 over the specified axes.
self.register_output('axiswise_pnorm',
ot.pnorm(in1, axis=(1, 3), pnorm_type=6))
prob = Problem()
prob.model = ExampleAxisWise()
prob.setup(force_alloc_complex=True)
prob.run_model()
print('in1', prob['in1'].shape)
print(prob['in1'])
print('axiswise_pnorm', prob['axiswise_pnorm'].shape)
print(prob['axiswise_pnorm'])
in1 (2, 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.]]]
[[[ 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.]]]]
axiswise_pnorm (2, 4)
[[ 55.27293037 61.97214963 68.7394199 75.57412475]
[139.78396808 147.15756319 154.56590911 162.00594162]]