NumPy基础学习【3】-形状操作,数组组合

本文介绍了如何使用NumPy库中的方法改变数组的形状,并详细解释了ravel、reshape及resize等函数的作用。同时,还介绍了如何利用vstack、hstack、column_stack等函数将多个数组沿着指定轴进行堆叠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

书接上文

7.形状操作

    数组形状由沿每条轴的元素数量决定。

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

数组的形状可以用不同的指令来改变。下面的三个命令都返回一个新的数组,不改变原来的数组。

>>> b = a.ravel()
>>> b
array([7., 1., 6., 3., 9., 5., 7., 4., 2., 5., 0., 8.])
>>> b.shape
(12,)
>>> a.reshape(6,2)
array([[7., 1.],
       [6., 3.],
       [9., 5.],
       [7., 4.],
       [2., 5.],
       [0., 8.]])
>>> a.T
array([[7., 9., 2.],
       [1., 5., 5.],
       [6., 7., 0.],
       [3., 4., 8.]])
>>> a.T.shape
(4, 3)
>>> a.shape
(3, 4)

由ravel()生成的数组中的元素顺序通常是C格式的,a[0,0]后面跟着的就是a[0,1]。如果矩阵被reshape到其它形状,排列顺序也是C格式的。ravel和reshape函数通过参数可以使用FORTRAN格式的数组,即最左边的索引变化最快。

    reshape函数返回修改后的形状作为参数,而ndarray.resize则修改数组本身。

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

如果在改变形状的操作中,有一个维度参数为-1,则其维度将会被自动计算。

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

8.组合不同数组

    不同的数组可以沿着某一个轴堆叠在一起。

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

column_stack函数将1维数组作为列堆叠到2维数组中。它只有在2维数组的组合中与hstack相同。

>>> np.column_stack((a,b))
array([[4., 8., 1., 3.],
       [0., 1., 9., 7.]])
>>> a = np.array([4,2])
>>> b = np.array([3,8])
>>> np.column_stack((a,b))
array([[4, 3],
       [2, 8]])
>>> np.hstack((a,b))
array([4, 2, 3, 8])
>>> a[:,np.newaxis]  #将数组转换成2维
array([[4],
       [2]])
>>> np.column_stack((a[:,np.newaxis],b[:,np.newaxis]))
array([[4, 3],
       [2, 8]])
>>> np.hstack((a[:,np.newaxis],b[:,np.newaxis]))
array([[4, 3],
       [2, 8]])

对于任何形式输入的数组,row_stack的功能与vstack相同。对于超过两维的数组,hstack根据第二个轴进行组合,vstack根据第一个轴进行组合,concatenate允许有一个可选参数,该参数表示沿着指定的轴作组合。

    在复杂情况下,r_和c_可通过一个轴创建数组,允许使用‘:’符号:

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

    当使用数组作为参数时,r_和c_与vstack和hstack相似,但是有一个可选参数,表示沿着特定的轴连接数组。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值