形状操作
更改数组的形状
一个数组的形状由它每个轴上的元素个数给出:
>>> 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() 将总是不需要复制它的参数 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.]]) >>>