Reshape a Tensor to a VectorΒΆ

This is an example of how to use the omtools.reshape() function to reshape a tensor to a vector.

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


class ExampleTensor2Vector(Group):
    def setup(self):
        shape = (2, 3, 4, 5)
        size = 2 * 3 * 4 * 5

        # Both vector or tensors need to be numpy arrays
        tensor = np.arange(size).reshape(shape)
        vector = np.arange(size)

        # in1 is a tensor having shape = (2, 3, 4, 5)
        in1 = self.declare_input('in1', val=tensor)

        # in1 is being reshaped from shape = (2, 3, 4, 5) to a vector
        # having size = 2 * 3 * 4 * 5
        self.register_output('reshape_tensor2vector',
                             ot.reshape(in1, new_shape=(size, )))


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

print('in1', prob['in1'].shape)
print(prob['in1'])
print('reshape_tensor2vector', prob['reshape_tensor2vector'].shape)
print(prob['reshape_tensor2vector'])
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.]]]]
reshape_tensor2vector (120,)
[  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.]