zoukankan      html  css  js  c++  java
  • numpy 学习笔记

    >>> import numpy as np  #导入numpy

    array 的基本操作

    arange

    >>> a = np.arange(1,15) #返回从1到15的array
    >>> a
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
    >>>
    >>> a = np.arange(15) #返回从0到14的array
    >>>
    >>> a
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
    >>>
    >>> a = np.arange(1,15) #返回从1到14的array
    >>> a
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
    >>>
    >>> a = np.arange(10,40,5) #创建array,值为10到40之间,间隔为5
    >>> a
    array([10, 15, 20, 25, 30, 35])
    >>> a = np.arange(0,2,0.3)
    >>> a
    array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

    reshape

    >>> b = np.reshape(a,(3,5)) #将数据的数据变为3行5列的array
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 225, in reshape
        return reshape(newshape, order=order)
    ValueError: total size of new array must be unchanged

    为什么会出错呢?  因为 a 只有14个元素,不够分

    >>> a = np.arange(0,15) #返回从1到14的array
    >>>
    >>> b = np.reshape(a,(3,5)) #将数据的数据变为3行5列的array
    >>> b
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])
    >>>

    shape, ndim, size, type

    >>> b.shape #返回几行几列
    (3, 5)
    >>> b.ndim   #返回维度
    2
    >>> b.dtype.name #数据类型
    'int64'
    >>> b.size  #array大小
    15
    >>> type(b)   #b的类型
    <type 'numpy.ndarray'>

    从list生成 array

    >>> a = np.array([2,3,4]) #从list生成array
    >>> a
    array([2, 3, 4])
    >>> b = np.array([(1,2,3),(4,5,6)])#从list生成2维array
    >>> b
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> c = np.array([[1,2,3],[1,2,3]])
    >>> c
    array([[1, 2, 3],
           [1, 2, 3]])

    通过numpy 内建函数初始化 array

    >>> a = np.zeros((3,4)) #创建3行4列的全0 array
    >>>
    >>> a = np.zeros((3,4)) #创建3行4列的全0 array,注意有两层括号
    >>> a
    array([[ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])
    >>> a = np.ones((3,4)) #创建3行4列的全1 array
    >>> a
    array([[ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.]])

    数组运算

    >>> a = np.array([20,30,40,50])
    >>> a
    array([20, 30, 40, 50])
    >>> b = np.arange(4)
    >>> b
    array([0, 1, 2, 3])
    >>> c = a-b
    >>> c
    array([20, 29, 38, 47])
    >>> c = a-b #相减
    >>> c
    array([20, 29, 38, 47])
    >>> b**2
    array([0, 1, 4, 9])
    >>> b**2   #每个元素的平方
    array([0, 1, 4, 9])
    >>> 10*np.sin(a)
    array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
    >>> a<35
    array([ True,  True, False, False], dtype=bool)
    >>> a*b  #对应位置元素相乘
    array([  0,  30,  80, 150])
    >>> a.dot(b)
    260
    >>> a.dot(b)  #矩阵乘法
    260
    >>> np.dot(a,b)
    260

    数组运算内建函数

    >>> a = np.array([[1,2,3],[4,5,6]])
    >>> a
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> a.sum()
    21
    >>> a.sum(axis=1) #每行的和
    array([ 6, 15])
    >>> a.sum(axis=0) #每列的和
    array([5, 7, 9])
    >>> a.max()
    6
    >>> a.min()
    1

    Shape操作

    >>> a = np.floor(10*np.random.random((3,4)))  #注意:floor是向下取整
    >>> a
    array([[ 3.,  9.,  6.,  7.],
           [ 8.,  8.,  6.,  8.],
           [ 4.,  4.,  5.,  3.]])
    >>> a.shape
    (3, 4)
    >>>
    >>> a.ravel()   #把array变成一个向量
    array([ 3.,  9.,  6.,  7.,  8.,  8.,  6.,  8.,  4.,  4.,  5.,  3.])
    >>> a.reshape(6,2)
    array([[ 3.,  9.],
           [ 6.,  7.],
           [ 8.,  8.],
           [ 6.,  8.],
           [ 4.,  4.],
           [ 5.,  3.]])
    >>> a.T  #a的转置
    array([[ 3.,  8.,  4.],
           [ 9.,  8.,  4.],
           [ 6.,  6.,  5.],
           [ 7.,  8.,  3.]])
    >>> a.T.shape
    (4, 3)
    >>> a.shape
    (3, 4)
    >>> a.resize((2,6)) #注意resize和reshape的区别就是,resize会改变a本身,reshape不会
    >>> a
    array([[ 3.,  9.,  6.,  7.,  8.,  8.],
           [ 6.,  8.,  4.,  4.,  5.,  3.]])
    >>> a.reshape(3,-1) #-1表示这一维自动计算
    array([[ 3.,  9.,  6.,  7.],
           [ 8.,  8.,  6.,  8.],
           [ 4.,  4.,  5.,  3.]])
    >>>

    拼接

    >>> a = np.array([[1,2],[3,4]])
    >>> a
    array([[1, 2],
           [3, 4]])
    >>> b = np.array([[5,6],[7,8]])
    >>> b
    array([[5, 6],
           [7, 8]])
    >>> np.vstack((a,b))  #把b放在a下面
    array([[1, 2],
           [3, 4],
           [5, 6],
           [7, 8]])
    >>> np.hstack((a,b))  #把b放在a右边
    array([[1, 2, 5, 6],
           [3, 4, 7, 8]])

    切分

    >>> a = np.floor(10*np.random.random((2,12)))
    >>>
    >>> a
    array([[ 4.,  2.,  8.,  8.,  6.,  2.,  5.,  3.,  4.,  7.,  1.,  9.],
           [ 4.,  4.,  9.,  8.,  0.,  1.,  2.,  1.,  3.,  6.,  7.,  2.]])
    >>>
    >>> np.hsplit(a,3)  #把a横向分为3份
    [array([[ 4.,  2.,  8.,  8.],
           [ 4.,  4.,  9.,  8.]]), array([[ 6.,  2.,  5.,  3.],
           [ 0.,  1.,  2.,  1.]]), array([[ 4.,  7.,  1.,  9.],
           [ 3.,  6.,  7.,  2.]])]
    >>> np.vsplit(a.T,3) #纵向分
    [array([[ 4.,  4.],
           [ 2.,  4.],
           [ 8.,  9.],
           [ 8.,  8.]]), array([[ 6.,  0.],
           [ 2.,  1.],
           [ 5.,  2.],
           [ 3.,  1.]]), array([[ 4.,  3.],
           [ 7.,  6.],
           [ 1.,  7.],
           [ 9.,  2.]])]
    >>>

    零散笔记

    表示array中的特定几行

    >>> h
    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, 32, 33, 34, 35, 36, 37, 38, 39],
           [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
           [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])
    >>> mask = range(5)
    >>> mask
    [0, 1, 2, 3, 4]
    >>> h[mask] #取 h 的0,1,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, 24, 25, 26, 27, 28, 29],
           [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
           [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])
    >>>
    >>> mask = range(2,5)
    >>> mask
    [2, 3, 4]
    >>> h[mask]  #取 h 的 2,3,4 行
    array([[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
           [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
           [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

    均值

    >>> np.mean(h,axis=0)  #每一列的均值
    array([ 25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,  33.,  34.])
    >>> np.mean(h,axis=1)  #每一行的均值
    array([  4.5,  14.5,  24.5,  34.5,  44.5,  54.5])

    随机数

    >>> w = np.random.randn(3073, 10) #生成一个随机数矩阵,随机数值在(0,1)之间,符合均匀分布
    >>> w
    array([[ 0.67549354,  0.90033156, -0.17879922, ...,  0.73086887,
            -1.36429038, -0.84239665],
           [ 0.63798799, -0.49243242, -0.77956457, ...,  1.13186242,
            -0.88691027, -0.59729021],
           [ 0.5981941 ,  1.0869356 , -0.52344575, ...,  0.51742916,
            -1.35772943,  0.31620054],
           ...,
           [-0.23798699,  0.4268321 ,  1.30880808, ..., -0.26957533,
             1.40720518,  1.37996847],
           [ 0.24834546, -1.16090435,  1.93973511, ...,  0.68083319,
            -0.7405012 , -0.45362532],
           [ 0.87408501,  2.2738675 , -0.14890794, ...,  0.41797693,
            -1.7666044 ,  1.33517877]])
    >>> w.shape[0]
    3073
    >>> w.shape[1]
    10

    向量和数组的大小

    >>> a = np.array([11,31,32,44])
    >>> a.shape  #注意返回值其实是向量的长度
    (4,)
    >>> y
    array([[3],
           [4],
           [5]])
    >>> y.shape  #返回值是矩阵行数和列数
    (3, 1)

    矩阵减向量

    >>> h
    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, 32, 33, 34, 35, 36, 37, 38, 39],
           [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
           [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])
    >>> a
    array([[ 0],
           [10],
           [20],
           [30],
           [40],
           [50]])
    >>> h-a            #矩阵减向量,相当于把向量每行扩展成矩阵宽度大小
    array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
           [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
           [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
           [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
           [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
           [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

    用向量索引array

    >>> y = np.arange(6)
    >>> y
    array([0, 1, 2, 3, 4, 5])
    >>> h = np.arange(60).reshape(6,-1)
    >>> h
    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, 32, 33, 34, 35, 36, 37, 38, 39],
           [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
           [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])
    >>> h[range(6),y]         #取 h 数组中(0,0),(1,1),(2,2),(3,3),(4,4),(5,5)元素
    array([ 0, 11, 22, 33, 44, 55])
    >>> h[range(6),y]=0     #设置对角线上的元素为0
    >>> h
    array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
           [10,  0, 12, 13, 14, 15, 16, 17, 18, 19],
           [20, 21,  0, 23, 24, 25, 26, 27, 28, 29],
           [30, 31, 32,  0, 34, 35, 36, 37, 38, 39],
           [40, 41, 42, 43,  0, 45, 46, 47, 48, 49],
           [50, 51, 52, 53, 54,  0, 56, 57, 58, 59]])
    >>> y = y.reshape(-1,1)
    >>>
    >>> y
    array([[0],
           [1],
           [2],
           [3],
           [4],
           [5]])
    >>> h[range(6),y]=1     #将0-5行0-5列的所有元素都置为1
    >>> h
    array([[ 1,  1,  1,  1,  1,  1,  6,  7,  8,  9],
           [ 1,  1,  1,  1,  1,  1, 16, 17, 18, 19],
           [ 1,  1,  1,  1,  1,  1, 26, 27, 28, 29],
           [ 1,  1,  1,  1,  1,  1, 36, 37, 38, 39],
           [ 1,  1,  1,  1,  1,  1, 46, 47, 48, 49],
           [ 1,  1,  1,  1,  1,  1, 56, 57, 58, 59]])

    array 乘法

    >>> h
    array([[ 1,  1,  1,  1,  1,  1,  6,  7,  8,  9],
           [ 1,  1,  1,  1,  1,  1, 16, 17, 18, 19],
           [ 1,  1,  1,  1,  1,  1, 26, 27, 28, 29],
           [ 1,  1,  1,  1,  1,  1, 36, 37, 38, 39],
           [ 1,  1,  1,  1,  1,  1, 46, 47, 48, 49],
           [ 1,  1,  1,  1,  1,  1, 56, 57, 58, 59]])
    >>> h=(h>1)*h     #小于1的都为0,大于1的不变
    >>> h
    array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
           [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
           [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
           [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
           [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49],
           [ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59]])

    求和

    >>> c
    array([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
           [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
           [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
           [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
           [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
           [0, 0, 0, 0, 0, 0, 1, 1, 1, 1]])
    >>> np.sum(c,axis=1)   #每行之和
    array([4, 4, 4, 4, 4, 4])
    >>> np.sum(c,axis=0)   #每列之和
    array([0, 0, 0, 0, 0, 0, 6, 6, 6, 6])

    最大值最小值的索引

    >>> h
    array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
           [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
           [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
           [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
           [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49],
           [ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59]])
    >>> h.max(axis=0)
    array([ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59])
    >>> h.max(axis=0)        #每列的最大值
    array([ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59])
    >>> h.min(axis=1)        #每行的最大值
    >>> np.argmax(h,axis=0)  #每列的最大值的索引
    array([0, 0, 0, 0, 0, 0, 5, 5, 5, 5])
    >>> np.argmax(h,axis=1)  #每行的最大值的索引
    array([9, 9, 9, 9, 9, 9])

    判断两个array是否相等

    >>> x
    array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> y = np.ones((1,9))
    >>> y
    array([[ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]])
    >>> x==y                     #判断对应位置的元素是否相等
    array([[ True, False, False, False, False, False, False, False, False]], dtype=bool)
    >>> np.mean(x==y)       #对x==y的结果取均值
    0.1111111111111111

    去掉某些行/列

    >>> h
    array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
           [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
           [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
           [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
           [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49],
           [ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59]])
    >>> w=h[:-1,:]           #去掉最后一行
    >>> w
    array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
           [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
           [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
           [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
           [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49]])
    >>> w = h[:-2,:]         #去掉最后两行
    >>> w
    array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
           [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
           [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
           [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39]])
    >>> w = h[:,:-4]         #去掉最后4列
    >>> w
    array([[0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0]])
    >>> w = h[:,:4]        #得到前四列
    >>> w
    array([[0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0]])
  • 相关阅读:
    STM32的DMA
    STM32 入门之 GPIO (zhuan)
    CRC校验码 代码
    actan函数 查表法
    UART 和 USART 的区别
    STM32的NVIC理解
    STM32_adc
    STM 32 can 实例代码
    在Visual C#中调用API的基本过程
    贴片电阻阻值标识
  • 原文地址:https://www.cnblogs.com/lxb0478/p/8303040.html
Copyright © 2011-2022 走看看