形状操作
更改数组的形状
一个数组的形状由它每个轴上的元素个数给出:
>>> a = floor(10*random.random((3,4)))
>>> a
array([[ 7., 5., 9., 3.],
[ 7., 2., 7., 8.],
[ 6., 8., 3., 2.]])
>>> a.shape
(3, 4)
一个数组的形状可以被多种命令修改:
>>> a.ravel() # flatten the array
array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.])
>>> a.shape = (6, 2)
>>> a.transpose()
array([[ 7., 9., 7., 7., 6., 3.],
[ 5., 3., 2., 8., 8., 2.]])
由 ravel()
展平的数组元素的顺序通常是“C风格”的,就是说,最右边的索引变化得最快,所以元素a[0,0]之后是a[0,1]。如果数组被改变形状(reshape)成其它形状,数组仍然是“C风格”的。NumPy通常创建一个以这个顺序保存数据的数组,所以 ravel()
将总是不需要复制它的参数 3 。但是如果数组是通过切片其它数组或有不同寻常的选项时,它可能需要被复制。函数 reshape()
和 ravel()
还可以被同过一些可选参数构建成FORTRAN风格的数组,即最左边的索引变化最快。
reshape
函数改变参数形状并返回它,而 resize
函数改变数组自身。
>>> a
array([[ 7., 5.],
[ 9., 3.],
[ 7., 2.],
[ 7., 8.],
[ 6., 8.],
[ 3., 2.]])
>>> a.resize((2,6))
>>> a
array([[ 7., 5., 9., 3., 7., 2.],
[ 7., 8., 6., 8., 3., 2.]])
如果在改变形状操作中一个维度被给做-1,其维度将自动被计算
更多 shape, reshape, resize, ravel 参考 NumPy示例
>>> a = floor(10*random.random((3,4)))
>>> a
array([[ 0., 1., 8., 6.],
[ 7., 1., 9., 9.],
[ 7., 3., 9., 8.]])
>>> a.shape
(3, 4)
>>> a.ravel()
array([ 0., 1., 8., 6., 7., 1., 9., 9., 7., 3., 9., 8.])
>>> a.shape = (6, 2)
>>> a
array([[ 0., 1.],
[ 8., 6.],
[ 7., 1.],
[ 9., 9.],
[ 7., 3.],
[ 9., 8.]])
>>> a.transpose()
array([[ 0., 8., 7., 9., 7., 9.],
[ 1., 6., 1., 9., 3., 8.]])
>>> a.shape = (3,4)
>>> a.transpose()
array([[ 0., 7., 7.],
[ 1., 1., 3.],
[ 8., 9., 9.],
[ 6., 9., 8.]])
>>> a=array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.])
>>> a
array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.])
>>> a.reshape(6,2)
array([[ 7., 5.],
[ 9., 3.],
[ 7., 2.],
[ 7., 8.],
[ 6., 8.],
[ 3., 2.]])
>>> a
array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.])
>>> a.resize((2,6))
>>> a
array([[ 7., 5., 9., 3., 7., 2.],
[ 7., 8., 6., 8., 3., 2.]])
>>>