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)
# Transpose of a matrix self.register_output('einsum_reorder1', csdl.einsum(mat, subscripts='ij->ji'))
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.]]