Numpy学习——数组形状的改变、拆分、整合

改变数组的形状

数组的形状可以改变,但是元素不可以改变。

在reshape()的操作中,如果某个方向的大小设置为-1,则会根据其他方向上设定的大小来计算-1这个方向的大小。

>>> a = np.range(24)

>>> a.reshape([2,3,4])

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

>>> a.reshape([2,3,-1])

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

# 根据2,3自动推导得-1其实是“4”

也可以进行转置操作,使用T属性

>>> a.reshape(4,-1)

array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

>>> a.reshape(4,-1).T

array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

对于维度大于2的数组,可以使用transpose()函数来进行重新排列。通过排列各个轴的轴号,从而实现数组结构的改变

>>> a = a.reshape([2,3,4])

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

>>> a.transpose((2,1,0))
array([[[ 0, 12],
        [ 4, 16],
        [ 8, 20]],

       [[ 1, 13],
        [ 5, 17],
        [ 9, 21]],

       [[ 2, 14],
        [ 6, 18],
        [10, 22]],

       [[ 3, 15],
        [ 7, 19],
        [11, 23]]])

这里的(2,1,0)是转换坐标轴的结果。就是指原来的0(可想成x)轴变成了2(可想成z)轴。原来的1(y)轴不变。

大家可以使用三维坐标系来找点,也可以参照这篇博客:https://blog.csdn.net/u012762410/article/details/78912667

画一画坐标系就可以得到。

也可以使用ravel()函数改变数组的形状,他会逐行读取元素并返回一维数组。

也可以使用resize()函数,和reshape()不一样的地方在于,它会直接改变数组

组装、分割数组

  • 垂向组装两个二维数组
>>> a = np.random.rand(2,2)
array([[0.38646058 0.54026921],
 [0.7098984  0.15758503]])

>>> b = np.random.rand(2,2)
array([[0.22686851 0.15525425],
 [0.0545175  0.5187691 ]])

>>> np.vstack((a,b))
array([[0.38646058 0.54026921],
 [0.7098984  0.15758503],
 [0.22686851 0.15525425],
 [0.0545175  0.5187691 ]])
  • 横向组长两个二维数组
>>> np.hstack((a,b))

array([[0.38646058, 0.54026921, 0.22686851, 0.15525425],
       [0.7098984 , 0.15758503, 0.0545175 , 0.5187691 ]])
  • 分割数组,比如可以通过在第二列和第四列对数组进行分割,得到三个数组,三个数组在横轴上的长度分别是2、2、4
>>> a = np.range(32).reshape(4,8)

array([[ 0  1  2  3  4  5  6  7],
 [ 8  9 10 11 12 13 14 15],
 [16 17 18 19 20 21 22 23],
 [24 25 26 27 28 29 30 31]])

>>> np.hsplit(a,[2,4])

[array([[ 0,  1],
        [ 8,  9],
        [16, 17],
        [24, 25]]),
 array([[ 2,  3],
        [10, 11],
        [18, 19],
        [26, 27]]),
 array([[ 4,  5,  6,  7],
        [12, 13, 14, 15],
        [20, 21, 22, 23],
        [28, 29, 30, 31]])]

猜你喜欢

转载自blog.csdn.net/m0_50470999/article/details/108529646