Transpose arrays and swap axes#
Transpose is a special form of reshaping that also provides a view of the underlying data without copying anything. Arrays have the Transpose method and also the special T attribute:
[1]:
import numpy as np
[2]:
data = np.arange(16)
[3]:
data
[3]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
[4]:
reshaped_data = data.reshape((4, 4))
[5]:
reshaped_data
[5]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
[6]:
reshaped_data.T
[6]:
array([[ 0, 4, 8, 12],
[ 1, 5, 9, 13],
[ 2, 6, 10, 14],
[ 3, 7, 11, 15]])
numpy.dot returns the scalar product of two arrays, for example:
[7]:
np.dot(reshaped_data.T, reshaped_data)
[7]:
array([[224, 248, 272, 296],
[248, 276, 304, 332],
[272, 304, 336, 368],
[296, 332, 368, 404]])
The @
infix operator is another way to perform matrix multiplication. It implements the semantics of the @
operator introduced in Python 3.5 with PEP 465 and is an abbreviation of np.matmul.
[8]:
data.T @ data
[8]:
1240
For higher dimensional arrays, transpose accepts a tuple of axis numbers to swap the axes:
[9]:
array_3d = np.arange(16).reshape((2, 2, 4))
[10]:
array_3d
[10]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
[11]:
array_3d.transpose((1, 0, 2))
[11]:
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
Here the axes have been reordered with the second axis in first place, the first axis in second place and the last axis unchanged.
ndarray
also has a swapaxes method that takes a pair of axis numbers and swaps the specified axes to rearrange the data:
[12]:
array_3d.swapaxes(1, 2)
[12]:
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])