Skip to main content

Dot Product between Two Tensors Across the Last Axis

This is an example of how to use the csdl.dot() function to compute the dot product between two vectors.

from csdl_om import Simulatorfrom csdl import Modelimport csdlimport numpy as np

class ExampleTensorTensorLast(Model):
    def define(self):
        m = 2        n = 4        p = 3
        # 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 the tensors to csdl        ten1 = self.declare_variable('ten1', val=ten1)        ten2 = self.declare_variable('ten2', val=ten2)
        # Tensor-Tensor Dot Product specifying the last axis        self.register_output('TenTenDotLast',                             csdl.dot(ten1, ten2, axis=2))

sim = Simulator(ExampleTensorTensorLast())sim.run()
print('ten1', sim['ten1'].shape)print(sim['ten1'])print('ten2', sim['ten2'].shape)print(sim['ten2'])print('TenTenDotLast', sim['TenTenDotLast'].shape)print(sim['TenTenDotLast'])
[[[ 0.  1.  2.]  [ 3.  4.  5.]  [ 6.  7.  8.]  [ 9. 10. 11.]]
 [[12. 13. 14.]  [15. 16. 17.]  [18. 19. 20.]  [21. 22. 23.]]]ten2 (2, 4, 3)[[[24. 25. 26.]  [27. 28. 29.]  [30. 31. 32.]  [33. 34. 35.]]
 [[36. 37. 38.]  [39. 40. 41.]  [42. 43. 44.]  [45. 46. 47.]]]TenTenDotLast (2, 4)[[  77.  338.  653. 1022.] [1445. 1922. 2453. 3038.]]