numpy学习笔记2

## 各种形状转换方法
>>> import numpy as np
>>> a=np.floor(10*np.random.random((3,4)))
>>> a
array([[6., 0., 1., 3.],
       [6., 9., 9., 1.],
       [8., 4., 8., 4.]])
>>> a.ravel()
array([6., 0., 1., 3., 6., 9., 9., 1., 8., 4., 8., 4.])
>>> a.T
array([[6., 6., 8.],
       [0., 9., 4.],
       [1., 9., 8.],
       [3., 1., 4.]])
>>> a.T.shape
(4, 3)
>>> a.resize((2,6))
>>> a
array([[6., 0., 1., 3., 6., 9.],
       [9., 1., 8., 4., 8., 4.]])

## 数组堆叠
>>> a=np.floor(10*np.random.random((2,2)))
>>> b=np.floor(10*np.random.random((2,2)))
>>> a
array([[6., 2.],
       [7., 3.]])
>>> b
array([[9., 7.],
       [8., 1.]])
>>> np.vstack((a,b))
array([[6., 2.],
       [7., 3.],
       [9., 7.],
       [8., 1.]])
>>> np.hstack((a,b))
array([[6., 2., 9., 7.],
       [7., 3., 8., 1.]])
>>> np.column_stack((a,b))
array([[6., 2., 9., 7.],
       [7., 3., 8., 1.]])
>>> 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.])
>>> np.vstack((a,b))
array([[4., 2.],
       [3., 8.]])
>>> a[:,np.newaxis]
array([[4.],
       [2.]])
>>> b[:,np.newaxis]
array([[3.],
       [8.]])
>>> 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.]])
>>> np.r_[1:4,0,5]
array([1, 2, 3, 0, 5])

## 数组拆分
>>> a=np.floor(10*np.random.random((2,12)))
>>> a
array([[2., 0., 3., 1., 2., 5., 8., 9., 8., 0., 8., 6.],
       [3., 6., 0., 3., 6., 3., 8., 3., 5., 0., 7., 2.]])
>>> np.hsplit(a,3)
[array([[2., 0., 3., 1.],
       [3., 6., 0., 3.]]), array([[2., 5., 8., 9.],
       [6., 3., 8., 3.]]), array([[8., 0., 8., 6.],
       [5., 0., 7., 2.]])]
>>> np.hsplit(a,(3,4))
[array([[2., 0., 3.],
       [3., 6., 0.]]), array([[1.],
       [3.]]), array([[2., 5., 8., 9., 8., 0., 8., 6.],
       [6., 3., 8., 3., 5., 0., 7., 2.]])]
>>> np.vsplit(a,3)

## 拷贝和视图
>>> import numpy as np
>>> a=np.arange(12)
>>> b=a
>>> b is a
True
>>> b.shape=3,4
>>> a.shape
(3, 4)
>>> b=a.view()
>>> b is a
False
>>> b.base is a
True
>>> b.flags.owndata
False
>>> b.shape=3,4
>>> a.shape
(3, 4)
>>> b[2,3]=222
>>> a
array([[  0,   1,   2,   3],
       [  4,   5,   6,   7],
       [  8,   9,  10, 222]])
       
## 各种索引方法
>>> import numpy as np
>>> a=np.arange(12)**2
>>> a
array([  0,   1,   4,   9,  16,  25,  36,  49,  64,  81, 100, 121],
      dtype=int32)
>>> i=np.array([1,1,3,8,5])
>>> a[i]  # 以数组对象作为索引
array([ 1,  1,  9, 64, 25], dtype=int32)

**数组是一维时,左右两个列表分别取对应位置数字组成索引:(3,9),(4,7)**
>>> j=np.array([[3,4],[9,7]])
>>> a[j]
array([[ 9, 16],
       [81, 49]], dtype=int32)

**数组是多维时,多维数组作为索引返回更高维数组**
>>> a=np.arange(12).reshape(3,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> i=np.array([[0,1], [1,2]])
>>> j=np.array([[2,1], [3,3]])
>>> a[i]
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]])
>>> a[i,j]
array([[ 2,  5],
       [ 7, 11]])
>>> a[i,2]
array([[ 2,  6],
       [ 6, 10]])

**??**
>>> a[:,j]
array([[[ 2,  1],
        [ 3,  3]],

       [[ 6,  5],
        [ 7,  7]],

       [[10,  9],
        [11, 11]]])
>>> l=[i,j]
>>> a[l]

## 通过索引获取最值
>>> time=np.linspace(20,145,5)
>>> data=np.sin(np.arange(20)).reshape(5,4)
>>> time
array([ 20.  ,  51.25,  82.5 , 113.75, 145.  ])
>>> data
array([[ 0.        ,  0.84147098,  0.90929743,  0.14112001],
       [-0.7568025 , -0.95892427, -0.2794155 ,  0.6569866 ],
       [ 0.98935825,  0.41211849, -0.54402111, -0.99999021],
       [-0.53657292,  0.42016704,  0.99060736,  0.65028784],
       [-0.28790332, -0.96139749, -0.75098725,  0.14987721]])
>>> ind=data.argmax(axis=0)
>>> ind
array([2, 0, 3, 1], dtype=int64)
>>> time_max=time[ind]
>>> time_max
array([ 82.5 ,  20.  , 113.75,  51.25])
>>> data_max=data[ind,range(data.shape[1])]
>>> data_max
array([0.98935825, 0.84147098, 0.99060736, 0.6569866 ])
>>> np.all(data_max == data.max(axis=0))
True

**修改数组会覆盖;不能加等于**
>>> a=np.arange(5)
>>> a
array([0, 1, 2, 3, 4])
>>> a[[0,0,2]]=[4,5,6]
>>> a
array([5, 1, 6, 3, 4])
>>> a[[2,3]]+=3
>>> a
array([5, 1, 9, 6, 4])

## 通过布尔值筛选并修改数组
>>> a=np.arange(12).reshape(3,4)
>>> b=a>4
>>> b
array([[False, False, False, False],
       [False,  True,  True,  True],
       [ True,  True,  True,  True]])
>>> a[b]
array([ 5,  6,  7,  8,  9, 10, 11])
>>> a[b]=0  # 是True的位置就会被修改
>>> a
array([[0, 1, 2, 3],
       [4, 0, 0, 0],
       [0, 0, 0, 0]])


>>> a=np.arange(12).reshape(3,4)
>>> b1=np.array([False,True,True])
>>> b2=np.array([True,False,True,False])
>>> a[b1,:]  # 根据布尔值筛选行
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a[b1]
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a[:,b2]  # 根据布尔值筛选列
array([[ 0,  2],
       [ 4,  6],
       [ 8, 10]])

## np.ix_()函数转化为多维数组
>>> a=np.array([2,3,4,5])
>>> b=np.array([8,5,4])
>>> c=np.array([5,4,6,8,3])
>>> ax,bx,cx = np.ix_(a,b,c)
>>> ax,bx,cx
(array([[[2]],

       [[3]],

       [[4]],

       [[5]]]), array([[[8],
        [5],
        [4]]]), array([[[5, 4, 6, 8, 3]]]))
>>> ax
array([[[2]],

       [[3]],

       [[4]],

       [[5]]])
>>> bx
array([[[8],
        [5],
        [4]]])
>>> cx
array([[[5, 4, 6, 8, 3]]])
>>> ax.shape,bx.shape,cx.shape
((4, 1, 1), (1, 3, 1), (1, 1, 5))
>>> bx*cx
array([[[40, 32, 48, 64, 24],
        [25, 20, 30, 40, 15],
        [20, 16, 24, 32, 12]]])
>>> result=ax+bx*cx
\
>>> result  # 元素个数分别为4,3,5,返回数组形状(4,3,5)
array([[[42, 34, 50, 66, 26],
        [27, 22, 32, 42, 17],
        [22, 18, 26, 34, 14]],

       [[43, 35, 51, 67, 27],
        [28, 23, 33, 43, 18],
        [23, 19, 27, 35, 15]],

       [[44, 36, 52, 68, 28],
        [29, 24, 34, 44, 19],
        [24, 20, 28, 36, 16]],

       [[45, 37, 53, 69, 29],
        [30, 25, 35, 45, 20],
        [25, 21, 29, 37, 17]]])
>>> result[3,2,4]
17
>>> a[3]+b[2]*c[4]
17

## 设置形状时,-1表示取任何值
>>> a=np.arange(30)
>>> shape=2,-1,3
>>> a.reshape(shape)
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]]])
posted @ 2021-07-19 15:15  君*邪  阅读(28)  评论(0编辑  收藏  举报