numpy学习笔记

整理:杨柳依

参考资料:《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   
    2   
    3   
    4   
    5   
    6   
    
    # 注意,使用一个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学习笔记)