转置是重塑的一种特殊形式,它返回源数据的视图。

数组不仅可以使用transpose方法,还可以直接使用T属性

arr = np.arange(15).reshape((3, 5))
arr.T

在进行矩阵计算时,经常需要用到该操作,比如使用np.dot计算矩阵內积

arr = np.random.randn(6, 3)
np.dot(arr.T, arr)

对于高维数组,transpose需要获取轴编号组成的元组才能对轴进行转置

arr = np.arange(16).reshape((2, 2, 4))
arr.transpose((1, 0, 2))

ndarray还提供swapaxes方法,它接受一对轴编号

arr.swapaxes(1, 2)

reshape

数组的形状

>>> a = np.floor(10*np.random.random((3,4)))
>>> a
array([[ 2.,  8.,  0.,  6.],
       [ 4.,  5.,  1.,  1.],
       [ 8.,  9.,  3.,  6.]])
>>> a.shape
(3, 4)

将数组变成flat

>>> a.ravel()  # returns the array, flattened
array([ 2.,  8.,  0.,  6.,  4.,  5.,  1.,  1.,  8.,  9.,  3.,  6.])

重新构建数组形状

>>> a.reshape(6,2)  # returns the array with a modified shape
array([[ 2.,  8.],
       [ 0.,  6.],
       [ 4.,  5.],
       [ 1.,  1.],
       [ 8.,  9.],
       [ 3.,  6.]])

对数组转置

>>> a.T  # returns the array, transposed
array([[ 2.,  4.,  8.],
       [ 8.,  5.,  9.],
       [ 0.,  1.,  3.],
       [ 6.,  1.,  6.]])
>>> a.T.shape
(4, 3)

resize会修改数组本身

>>> a.resize((2,6))
>>> a
array([[ 2.,  8.,  0.,  6.,  4.,  5.],
       [ 1.,  1.,  8.,  9.,  3.,  6.]])

如果在reshape时将维度指定为-1,则会自动计算它的维度

>>> a.reshape(3,-1)
array([[ 2.,  8.,  0.,  6.],
       [ 4.,  5.,  1.,  1.],
       [ 8.,  9.,  3.,  6.]])

results matching ""

    No results matching ""