1. A method for transposing data in a plurality of processing elements, comprising; shifting the data along diagonals of the plurality of processing elements until the processing elements in the diagonal have received the data held by every other processing element in that diagonal; selecting data as final output data based on a processing element's position.