Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request type
What is the current behavior?
In the implementation of tensor.transpose in https://github.com/gizatechxyz/orion/blob/main/src/operators/tensor/linalg/transpose.cairo, the implementation is very general and support any permutations. However, one of the most general use case, matrix transposition, could be done in a more optimized way. As it is used a lot in matrix theory and in linear algebra it can be important to have a more optimized implementation.
Issue Number: #394
What is the new behavior?
If the dimension of the input tensor is 2, the function transpose calls a sub-function
transpose2D
that computes the transposition of a 2D tensor. The 2D tensor transposition is a trivial permutation of axes and the corresponding retrieval of the element is therefore more straightforward.It directly gets the data from the input and avoids the creation of temporary arrays to support the more general permutation of the ND tensor problem.
output_data.append(*(*self.data)[i * m + j]);
With this implementation, transposition of 2D tensor is consumes about one order of magnitude less of gas.