转置是重塑的一种特殊形式,它返回源数据的视图。
数组不仅可以使用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.]])