• Numpy数组基础知识_Python数据分析与可视化


    创建数组

    在 Python 中创建数组有许多的方法,这里我们使用 Numpy 中的arange方法快速的新建一个数组:

    import numpy as np
    a = np.arange(5)
    
    • 1
    • 2

    其中import numpy as np是指引入Numpy这个库,并取别名为np。之所以取别名,是为了代码编写的方便。a=np.arange(5)是指将数值0 1 2 3 4赋值给a这个变量,这样我们就快速的创建了一个一维数组。

    创建多维数组的方法是:

    import numpy as np
    b = np.array([np.arange(6),np.arange(6)])
    
    • 1
    • 2

    这里,我们使用两个arange方法,创建了两个1x6的一维数组,然后使用numpy的array方法,将两个一维数组组合成一个2x6的二维数组。从而达到了创建多维数组的目的。

    numpy创建的数组可以直接复制,具体代码示例如下:

    import numpy as np
    x = [y for y in range(6)]
    b=np.array([x]*4)
    
    • 1
    • 2
    • 3

    该段代码会创建一个4*6的数组。

    基本运算

    Numpy库可以直接进行一些四则运算,快速的处理两个Numpy数组:

    a = np.array([[1,2,3],[4,5,6]])
    b = np.array([[4,5,6],[1,2,3]])
    
    • 1
    • 2

    向量与向量之间

    1. 加法

    In:np.add(a,b) 或 a+b
    Out:array([[5, 7, 9],
           [5, 7, 9]])
    
    • 1
    • 2
    • 3

    2.减法

    In:np.subtract(a,b) 或 a-b
    Out:array([[-3, -3, -3],
              [ 3,  3,  3]])
    
    • 1
    • 2
    • 3

    3.乘法(X乘)

    In:np.multiply(a,b) 或 a * b
    Out:array([[ 4, 10, 18],
              [ 4, 10, 18]])
    
    • 1
    • 2
    • 3

    4. 乘法(点乘)

    a = np.array([[1,2,3],[4,5,6]])
    b = np.array([4,5,6])
    In: np.dot(a,b) 
    Out:array([32, 77])
    
    • 1
    • 2
    • 3
    • 4

    5.除法

    a = np.array([[1,2,3],[4,5,6]])
    b = np.array([[4,5,6],[1,2,3]])
    In:np.divide(a,b) 或 a/b
    Out:array([[ 0.25,  0.4 ,  0.5 ],
              [ 4.  ,  2.5 ,  2.  ]])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    向量与标量之间

      a = np.array([[1,2,3],[4,5,6]])
    
    • 1

    1.加法

    In:  a +1
    Out:array([[2, 3, 4],
              [5, 6, 7]])
    
    • 1
    • 2
    • 3

    2.减法

    In:  a -1
    Out:array([[0, 1, 2],
              [3, 4, 5]])
    
    • 1
    • 2
    • 3

    3.乘法

    In: a*2
    Out:array([[ 2,  4,  6],
              [ 8, 10, 12]])
    
    • 1
    • 2
    • 3

    4.除法

    In: a/2
    Out:array([[ 0.5,  1. ,  1.5],
              [ 2. ,  2.5,  3. ]])
    
    • 1
    • 2
    • 3

    5.求余

    In:a%2
    Out:array([[1, 0, 1],
              [0, 1, 0]])
    
    • 1
    • 2
    • 3

    6.矩阵转置

    In:a.T
    Out:array([[1, 4],
              [2, 5],
              [3, 6]])
    
    • 1
    • 2
    • 3
    • 4

    7.矩阵的逆

    矩阵可逆的充要条件是矩阵满秩。

    import numpy as np
    import numpy.linalg as lg
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    In:lg.inv(a)
    Out:array([[  3.15251974e+15,  -6.30503948e+15,   3.15251974e+15],
              [ -6.30503948e+15,   1.26100790e+16,  -6.30503948e+15],
              [  3.15251974e+15,  -6.30503948e+15,   3.15251974e+15]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    切片与索引

    一维Numpy数组的切片操作与Python列表的切片一样。下面首先来定义数字0 1 2直到8的数组,然后通过指定下标3到7来选择数组的部分元素,这实际上就是提取数组中值为3到6的元素。

    In: import numpy as np
    In: a = np.arange(9)
    In: a[3:7]
    Out: array([3,4,5,6])
    
    • 1
    • 2
    • 3
    • 4

    同时用下标选择元素,下标范围从0到7,并且下标每次递增2,如下所示:

    In: a[:7:2]
    Out:array([0,2,4,6])
    
    • 1
    • 2

    也可以像Python数组一样,用负值下标来反转数组:

    In: a[::-1]
    Out: array([8,7,6,5,4,3,2,1,0])
    
    • 1
    • 2

    对于二维数组的索引,类似与Python数组的列表:

    In: a=np.array([[1,2,3],[4,3,2]])
    In: a[1][0] 
    Out:array([4])
    In:a[1,:2]    #获取第1维的前2个元素
    Out:array([4, 3])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    数组堆叠

    使用Numpy,我们可以方便的更改数组的形状,比如使用reshape()、ravel()、flatten()、transpose()函数等。
    具体的使用如下:

    改变数组形状

    reshape()

    import numpy as np
    In: b = np.arange(24).reshape(2,3,4)
    In: b
    Out: 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]]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ravel()
    拆解,将多维数组变成一维数组。

    In:  b.ravel()
    Out: 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])
    
    • 1
    • 2
    • 3

    flatten()
    拉直,其功能与ravel()相同,但是flatten()返回的是真实的数组,需要分配新的内存空间,而ravel()仅仅是改变视图。

    In:  b.flatten()
    Out: 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])
    
    • 1
    • 2
    • 3

    shape()
    使用元组改变数组形状。

    In: b.shape = (6,4)
    In: b
    out: 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]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    transpose()
    转置。

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

    数组的堆叠

    从深度看,数组既可以横向叠放,也可以竖向叠放。因此,我们我们对数组进行堆叠,Numpy数组对堆叠包含以下几个函数:
    首先,创建两个数组。

    In: a = np.arange(9).reshape(3,3)
    In: a
    Out: array([[0, 1, 2],
                [3, 4, 5],
                [6, 7, 8]])
    In: b = a*2
    In: b
    Out: array([[ 0,  2,  4],
                [ 6,  8, 10],
                [12, 14, 16]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    hstack()
    水平叠加。

    In: np.hstack((a,b))  # 注意 这里是两层括号
    Out: array([[ 0,  1,  2,  0,  2,  4],
                [ 3,  4,  5,  6,  8, 10],
                [ 6,  7,  8, 12, 14, 16]])
    
    • 1
    • 2
    • 3
    • 4

    vstack()
    垂直叠加。

    In: np.vstack((a,b))
    Out:array([[ 0,  1,  2],
               [ 3,  4,  5],
               [ 6,  7,  8],
               [ 0,  2,  4],
               [ 6,  8, 10],
               [12, 14, 16]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    dstack()
    深度叠加。

    In: np.dstack((a,b))
    Out: array([[[ 0,  0],
                 [ 1,  2],
                 [ 2,  4]],
                [[ 3,  6],
                 [ 4,  8],
                 [ 5, 10]],
                [[ 6, 12],
                 [ 7, 14],
                 [ 8, 16]]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    数组拆分

    使用Numpy,我们可以方便的对数组进行拆分,比如使用hsplit()、vsplit()、dsplit()、split()函数等。

    准备数组。

    import numpy as np
    In: a= np.arange(9).reshape(3,3)
    In: a
    Out: array([[0, 1, 2],
                [3, 4, 5],
                [6, 7, 8]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    hsplit()
    横向拆分。

    In: np.hsplit(a,3)
    Out:[array([[0],[3], [6]]), 
         array([[1], [4],[7]]), 
         array([[2],[5], [8]])]
    
    • 1
    • 2
    • 3
    • 4

    vsplit()
    纵向拆分。

    In: np.vsplit(a,3)
    Out: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
    
    • 1
    • 2

    dsplit()
    深度拆分。
    深度拆分要求数组的秩大于等于3。

    c= np.arange(27).reshape(3,3,3)
    In: np.dsplit(c,3)
    Out:[array([[[ 0],
                 [ 3],
                 [ 6]],
     
                [[ 9],
                 [12],
                 [15]],
     
                [[18],
                 [21],
                 [24]]]), 
         array([[[ 1],
                 [ 4],
                 [ 7]],
     
                [[10],
                 [13],
                 [16]],
     
                [[19],
                 [22],
                 [25]]]), 
         array([[[ 2],
                 [ 5],
                 [ 8]],
     
                [[11],
                 [14],
                 [17]],
     
                [[20],
                 [23],
                 [26]]])]
    
    • 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
  • 相关阅读:
    华为OD机试 - 特异性双端队列(Java 2023 B卷 100分)
    android studio编译SDL so库
    Go语言面试题合集(2022)
    海绵城市解决方案-最新全套文件
    JAVA项目maven
    视频定格合璧,批量剪辑轻松插入图片
    docker 安装 Influxdb-relay 使用
    什么是性能测试混合场景?性能测试混合场景如何测试?
    山东大学图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著
    Git常用命令diff和mv
  • 原文地址:https://blog.csdn.net/xks18232047575/article/details/134407412