1. A method for transposing data in a plurality of processing elements arranged in an NxN array, where N is greater than three, comprising; shifting the data N-1 times along a plurality of diagonals of length N of the plurality of processing elements until each processing element in each of said plurality of diagonals has received the original data held by every other processing element in that diagonal; and selecting data as final output data based on a processing element's position.