Skip to main content

Reordering a Matrix using Einsum

This is an example of how to properly use the einsum function to reorder a matrix.

from csdl_om import Simulatorimport numpy as npfrom csdl import Modelimport csdl

class ExampleReorderMatrix(Model):
    def define(self):        shape2 = (5, 4)        b = np.arange(20).reshape(shape2)        mat = self.declare_variable('b', val=b)
        # reorder of a matrix        self.register_output(            'einsum_reorder1',            csdl.einsum_new_api(mat, operation=[(46, 99), (99, 46)]))

sim = Simulator(ExampleReorderMatrix())sim.run()
print('b', sim['b'].shape)print(sim['b'])print('einsum_reorder1', sim['einsum_reorder1'].shape)print(sim['einsum_reorder1'])
[[ 0.  1.  2.  3.] [ 4.  5.  6.  7.] [ 8.  9. 10. 11.] [12. 13. 14. 15.] [16. 17. 18. 19.]]einsum_reorder1 (4, 5)[[ 0.  4.  8. 12. 16.] [ 1.  5.  9. 13. 17.] [ 2.  6. 10. 14. 18.] [ 3.  7. 11. 15. 19.]]