美文网首页
numpy学习笔记

numpy学习笔记

作者: 爱学习的王饱饱 | 来源:发表于2019-04-16 22:41 被阅读0次

    整理:杨柳依

    参考资料:《Numpy学习指南(第2版)》

    1. numpy 数组

    1.1 创建数组

    以下省略from numpy import *

    • 创建一维数组

      >>> a = arange(5) # 创建一维数组 
      >>> b = array([1,2,3,4,5]) # 创建一维数组
      >>> c = array([1,2,3,4,5], dtype=int64) # 指定数据类型
      >>> d = array([1,2,3.5])  # 传入的list必须是同一类型,否则会自动转换
      
    • 创建多维数组

      >>> a = array([[1,2,3],[4,5,6]])  # 创建二维数组
      >>> a.shape   # (2, 3)
      >>> a.ndim    # 2
      >>> a[1,0]    # 4
      
    • 获取数组属性

      >>> a = arange(5) # array([0, 1, 2, 3, 4])
      
      >>> a.dtype # 获取类型
      dtype('int32')
      >>> a.shape # 获取形状,返回一个元祖,可以看出是一维数组
      (5,)
      >>> a.ndim    # 获取维度,返回一个数字
      1
      >>> a.size # 返回元素总个数
      5
      >>> a.itemsize    # 返回数组单个元素所占字节数
      4
      >>> a.nbytes  # 返回数组所占总空间
      20
      >> a.T    # 转置,对于一维数组无变化
      

      对于复数元素,有

      >>> b = array([1+2j,2+4j])    # array([1.+2.j, 2.+4.j])
      
      >>> b.real    # 获取实部
      array([1., 2.])
      
      >>> b.imag    # 获取虚部
      array([2., 4.])
      

      特别的,使用flat属性获取一个迭代器

      >>> a = array([[1,2,3],[4,5,6]])
      >>> f = a.flat
      >>> for i in a.flat:
              print(i," ",type(i))
      1   <class 'numpy.int32'>
      2   <class 'numpy.int32'>
      3   <class 'numpy.int32'>
      4   <class 'numpy.int32'>
      5   <class 'numpy.int32'>
      6   <class 'numpy.int32'>
      
      # 注意,使用一个for循环无法取到每一个元素,只能取出[1,2,3]和[4,5,6]
      
      >>> a.flat = 9 # 对flat属性赋值会覆盖所有元素
      >>> a
      array([[9, 9, 9],
             [9, 9, 9]])
      

    1.2 数组切片

    • 一维数组切片

      >>> a = arange(10)    # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
      
      >>> a[3:7]
      array([3, 4, 5, 6])
      
      >>> a[3:7:2]  # 步长为2
      array([3, 5])
      
      >>> a[::-1]       # 步长为-1,相当于翻转
      array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
      
    • 多维数组切片

      >>> a = array([[1,2,3,4],
                   [5,6,7,8],
                   [9,10,11,12]])
      
      >>> a[:,0]    # 获取第1列,得到一维数组
      array([1, 5, 9])
      
      >>> a[0,:]    # 获取第1行,得到一维数组
      array([1, 2, 3, 4])
      
      >>> b = array(([[[1,2,3],
                       [4,5,6]],
                      [[7,8,9],
                       [10,11,12]]]))
      
      >>> b[0,:,:]  # 获取第1张表上的所有数据
      array([[1, 2, 3],
             [4, 5, 6]])
      >>> b[0,...]  # 同上,多个连续的冒号(:)可以用省略号(...)代替
      >>> b[0]      # 同上,后面的冒号可以直接省略
      
      >>> b[0,:,-1] # 获取第1张表上所有行最后一列的数据
      array([3, 6])
      
      >>> b[0,:,::-1]   # 将第1张表上所有行的列元素倒序排列
      array([[3, 2, 1],
             [6, 5, 4]])
      

    1.3 改变数组维度

    • 展平数组(降成一维)

      >>> b = array(([[[1,2,3],
                     [4,5,6]],
                      [[7,8,9],
                       [10,11,12]]]))
      
      >>> b.ravel() # 不改变原数组
      array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
      
      >>> b.flatten()   # 不改变原数组
      array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
      
    • 设置维度

      元素个数要与设置的维度相匹配,不然会报错

      >> b.shape = (2,6)    # 改变原数组,变为2×6的数组,[[1,2,3,4,5,6],[7,8,9,10,11,12]]
      >> b.resize((4,3))    # 改变原数组,变为4×3的数组
      >> b.reshape((3,4))   # 不改变原数组,返回3×4的数组
      
    • 数组转置

      >>> b = array([[1,2,3,4]])    
      >>> b.transpose() # 不改变原数组,返回转置后的数组,[[1],[2],[3],[4]]
      >>> b.T   # 同上
      

    1.4 数组的组合

    先产生一些数组

    >>> a = arange(9).reshape(3,3)
    >>> b = arange(11,14).reshape(1,3)
    >>> c = 2*a
    
    >>> a
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
    >>> b
    array([[11, 12, 13]])
    
    >>> c
    array([[ 0,  2,  4],
           [ 6,  8, 10],
           [12, 14, 16]])
    
    • 水平组合

      >>> hstack((a,b.T))
      array([[ 0,  1,  2, 11],
             [ 3,  4,  5, 12],
             [ 6,  7,  8, 13]])
      
      >>> concatenate((a,b.T),axis=1)
      array([[ 0,  1,  2, 11],
             [ 3,  4,  5, 12],
             [ 6,  7,  8, 13]])
      
    • 垂直组合

      >>> vstack((a,b))
      array([[ 0,  1,  2],
             [ 3,  4,  5],
             [ 6,  7,  8],
             [11, 12, 13]])
      
      >>> concatenate((a,b),axis=0) # concatenate函数axis参数默认为0,垂直组合
      array([[ 0,  1,  2],
             [ 3,  4,  5],
             [ 6,  7,  8],
             [11, 12, 13]])
      
    • 深度组合

      >>> dstack((a,c))
      array([[[ 0,  0],
              [ 1,  2],
              [ 2,  4]],
      
             [[ 3,  6],
              [ 4,  8],
              [ 5, 10]],
      
             [[ 6, 12],
              [ 7, 14],
              [ 8, 16]]])
      
    • 列组合

      >>> column_stack((b,b))   
      array([[11, 12, 13, 11, 12, 13]]) 
      
      # 对于二维数组,相当于hstack
      
    • 行组合

      >>> row_stack((b,b))  
      array([[11, 12, 13],
             [11, 12, 13]])
      
      # 对于二维数组,相当于vstack
      

    1.5 数组的分割

    • 水平分割

      >>> hsplit(a,3)
      [array([[0],
              [3],
              [6]]), 
       array([[1],
              [4],
              [7]]), 
       array([[2],
              [5],
              [8]])]
      
      >>> split(a,3,axis=1) # 与hsplit相同
      
    • 垂直分割

      >>> vsplit(a,3)
      [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
      
      >>> split(a,3,axis=0) # 与vsplit相同
      
    • 深度分割

      >>> d = arange(8).reshape(2,2,2)
      >>> dsplit(d,2)
      [array([[[0],
               [2]],
              [[4],
               [6]]]), 
       array([[[1],
               [3]],
              [[5],
               [7]]])]
      

    相关文章

      网友评论

          本文标题:numpy学习笔记

          本文链接:https://www.haomeiwen.com/subject/xqkwwqtx.html