# #形状操作

## #更改数组的形状

>>> 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)

>>> 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)
>>> a.shape
(3, 4)

reshape 函数返回具有修改形状的参数，而 ndarray.resize 方法修改数组本身：

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

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

ndarray.shape, reshape, resize, ravel

## #将不同数组堆叠在一起

>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[ 8.,  8.],
[ 0.,  0.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[ 1.,  8.],
[ 0.,  4.]])
>>> np.vstack((a,b))
array([[ 8.,  8.],
[ 0.,  0.],
[ 1.,  8.],
[ 0.,  4.]])
>>> np.hstack((a,b))
array([[ 8.,  8.,  1.,  8.],
[ 0.,  0.,  0.,  4.]])

>>> from numpy import newaxis
>>> np.column_stack((a,b))     # with 2D arrays
array([[ 8.,  8.,  1.,  8.],
[ 0.,  0.,  0.,  4.]])
>>> a = np.array([4.,2.])
>>> b = np.array([3.,8.])
>>> np.column_stack((a,b))     # returns a 2D array
array([[ 4., 3.],
[ 2., 8.]])
>>> np.hstack((a,b))           # the result is different
array([ 4., 2., 3., 8.])
>>> a[:,newaxis]               # this allows to have a 2D columns vector
array([[ 4.],
[ 2.]])
>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[ 4.,  3.],
[ 2.,  8.]])
>>> np.hstack((a[:,newaxis],b[:,newaxis]))   # the result is the same
array([[ 4.,  3.],
[ 2.,  8.]])

>>> np.r_[1:4,0,4]
array([1, 2, 3, 0, 4])

hstack, vstack, column_stack, concatenate, c_, r_

## #将一个数组分成几个较小的数组

>>> a = np.floor(10*np.random.random((2,12)))
>>> a
array([[ 9.,  5.,  6.,  3.,  6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.],
[ 1.,  4.,  9.,  2.,  2.,  1.,  0.,  6.,  2.,  2.,  4.,  0.]])
>>> np.hsplit(a,3)   # Split a into 3
[array([[ 9.,  5.,  6.,  3.],
[ 1.,  4.,  9.,  2.]]), array([[ 6.,  8.,  0.,  7.],
[ 2.,  1.,  0.,  6.]]), array([[ 9.,  7.,  2.,  7.],
[ 2.,  2.,  4.,  0.]])]
>>> np.hsplit(a,(3,4))   # Split a after the third and the fourth column
[array([[ 9.,  5.,  6.],
[ 1.,  4.,  9.]]), array([[ 3.],
[ 2.]]), array([[ 6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.],
[ 2.,  1.,  0.,  6.,  2.,  2.,  4.,  0.]])]

vsplit 沿纵轴分割，并且 array_split 允许指定沿哪个轴分割。