• numpy库的使用方法—Python


    numpy是python用于科学计算的基础工具库。它包含以下四大功能:

    1. 强大的多维数组处理对象
    2. 复杂的函数功能
    3. 有用的线性代数,傅里叶级数和随机数功能
    4. 集成C/C++和FORTRAN代码的工具

    一、 numpy的基本使用

    1.函数的导入

    import numpy as np
    
    • 1

    2.数组的创建

    1.查看数据类型

    import numpy as np
    
    a1 = np.array([1, 2, 3, 4])#生成整数型数组
    a2=a1.astype(float)#转化为浮点数,此命令等于下面这个
    a3=np.array([1, 2, 3, 4],dtype=float)#浮点数
    #查看数据类型
    a1.dtype
    a2.dtype
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    一个是整数,一个是浮点数

    2.创建等差和等比数列

    等差数列:
    arange(start,none,step,dtype) 分别是下限,上限,间隔,数字类型

    np.arange(0,100,2)
    
    • 1

    在这里插入图片描述
    linspace(statrt,stop,num,endpoint=T)分别是下限,上限,生成数字的个数,是否输出最后一个数字

    np.linspace(0,100,50,endpoint=False)
    
    • 1

    在这里插入图片描述
    等比数列

    np.logspace(0,10,num=20,dtype=int) 
    
    • 1

    在这里插入图片描述

    3. 矩阵的生成

    a=np.ones(4,int)#输出[1, 1, 1, 1]
    b=np.ones((4,3),int)#输出四行三列的1
    c=np.zeros((4,3),int)#输出4行3列的0矩阵
    d=np.eye(4)#生成4阶单位阵
    e=np.eye(4,k=2);e#输出第k对角线元素为1,其他行元素为0的矩阵
    f=np.zeros_like(a)#生成与a同维数的全0数组
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    3.数组元素的索引

    a=np.arange(16).reshape(4,4);a#生成四行四列的矩阵
    b=a[1][2]#输出第2行第3个,输出6,此命令等于下面这个
    c=a[1,2]   #输出结果也是6
    x=np.array([0,1,2,1])
    print(a[x==1])#输出第2行和第四行
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    二、矩阵的合并与分割

    1.矩阵的合并

    import numpy as np
    a=np.arange(16).reshape(4,4);a
    b=np.floor(5*np.random.random((2,4)));b#生成一个2行4列在0到1上的随机矩阵,乘以5,只保留整数部分
    c=np.ceil(4*np.random.randint(4,7,(4,2)))#生成一个4行2列在4到7上的随机整数矩阵,乘以4,ceil是向上取整函数
    np.vstack([a,b])#上下合并矩阵,放在另外一个矩阵的下面
    np.hstack([a,c])#左右和并矩阵
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    三个矩阵
    在这里插入图片描述
    合并结果:
    在这里插入图片描述

    2.矩阵的分割

    vsplit(a,m)把矩阵a平均分为m个行数组
    hsplit(a,n)把矩阵a平均分为n个行数组

    import numpy as np
    a=np.arange(16).reshape(4,4)
    b=np.vsplit(a,2);b#分成两个行数组
    print(b)
    c=np.hsplit(a,2)#分成两个列数组
    print(c)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    三、矩阵的简单运算

    1.求和

    import numpy as np
    a=np.array([[1,2,3],[0,0,1],[1,2,1]])
    a.sum()#求所有元素的和
    sum(a)#求每一列元素的和,与下面两个命令等价
    np.sum(a,axis=0,keepdims=True)
    np.sum(a,axis=0)
    np.sum(a,axis=1)#逐行求和
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.矩阵的逐个元素运算

    import numpy as np
    a=np.array([[1,2,3],[0,0,1],[1,2,1]])
    b=np.array([[1,2,3],[1,1,1],[1,2,1]])
    a/b#两个矩阵对应元素相除
    a*b#两个矩阵对应元素相乘
    a+b#两个矩阵对应元素相加
    a-b#两个矩阵对应元素相减
    a**(1/2)#a矩阵所有元素都开根号
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    四、 矩阵运算与线性代数

    表 1 numpy.linalg常用函数
    函数说明
    norm求矩阵的范数
    inv求逆矩阵
    pinv求矩阵的广义矩阵
    solve求解线性方程组
    det行列式
    lslsq最小二乘法求超定方程组
    eig求矩阵的特征值和特征向量
    svd矩阵的奇异值分解
    qr矩阵的QR分解

    1.范数的计算

    定义:范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即①非负性;②齐次性;③三角不等式。它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。

    例如:

    向量 [ 1 , 2 , 3 ] T [1,2,3]^T [1,2,3]T的欧式范数(Euclidean norm) 为 1 2 + 2 2 + 3 2 = 13 \sqrt{1^2+2^2+3^2}=\sqrt{13} 12+22+32 =13 用于表示向量的大小,这个范数也被叫做 l 2 l_2 l2 -范数。

    为方便统一,一般将任意向量 x 的 l p l_p lp -范数定义为:
    ∣ ∣ x ∣ ∣ = ∑ i ∣ x i ∣ p p \left| \left| x \right| \right|=\sqrt[p]{\sum_i{\left| x_i \right|^p}} x=pixip

    [参考文章](

    import numpy as np
    a=np.array([[0,3,4],[1,6,4]])
    b=np.linalg.norm(a,axis=1)#行向量的2范数
    c=np.linalg.norm(a,axis=0)#列向量的2范数
    d=np.linalg.norm(a)#求矩阵的2范数
    print("行向量的2范数为:",np.round(b,4))
    print("列向量的2范数为:",np.round(c,4))
    print("矩阵的2范数为:",np.round(d,4))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    2.求解线性方程组

    例1:
    { 3 x + y = 9 x + 2 y = 8

    {3x+y=9x+2y=8" role="presentation" style="position: relative;">{3x+y=9x+2y=8
    {3x+y=9x+2y=8
    解法一:

    根据 A X = B 可以求出 X = A − 1 B 于是我们可以先求出 A 的逆矩阵然后乘以 B \text{根据}AX=B\text{可以求出}X=A^{-1}B \\ \text{于是我们可以先求出}A\text{的逆矩阵然后乘以}B 根据AX=B可以求出X=A1B于是我们可以先求出A的逆矩阵然后乘以B

    import  numpy as np
    a=np.array([[3,1],[1,2]]);a
    b=np.array([9,8]);b
    np.linalg.inv(a)@b#@表示矩阵乘法
    
    • 1
    • 2
    • 3
    • 4
    import  numpy as np
    a=np.array([[3,1],[1,2]]);a
    b=np.array([9,8]);b
    np.linalg.inv(a)@b#@表示矩阵乘法
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方法二:直接根据np.linalg.solve函数来求

    ## 方法二:
    np.linalg.solve(a,b)
    
    • 1
    • 2

    求的结果都是X=2,Y=3
    例2:
    { 3 x + y = 9 x + 2 y = 8 x + y = 6 \left\{

    \begin{array}{c} \begin{array}{l} 3x+y=9\\ x+2y=8\\ \end{array}" role="presentation" style="position: relative;">\begin{array}{c} \begin{array}{l} 3x+y=9\\ x+2y=8\\ \end{array}
    \\ x+y=6\\ \end{array} \right. 3x+y=9x+2y=8x+y=6

    import  numpy as np
    a=np.array([[3,1],[1,2],[1,1]]);a
    b=np.array([9,8,6]);b
    c=np.linalg.pinv(a)@b#@表示矩阵乘法
    print(np.round(c,2))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    3.求特征值和特征向量

    求下面矩阵的特征值和特征向量
    ∣ 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 ∣ \left|

    0001011001001000" role="presentation" style="position: relative;">0001011001001000
    \right| 0001011001001000

    a=np.eye(4)
    b=np.rot90(a)#将a矩阵顺时针旋转90度,得到我们将向的矩阵
    c,d=np.linalg.eig(b)
    print("特征值:",c)
    print("eigenvector:\n",np.round(d,3))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    参考书籍

  • 相关阅读:
    入门数据库Days5
    ARM接口编程—IIC总线(exynos 4412平台)
    Axios进阶
    计算数组中每个元素的立方根numpy.cbrt()
    VS Code For Web 深入浅出 -- 导读篇
    LC-1726. 同积元组(哈希、哈希+数学)
    Spring去除了RestTemplate的默认导入配置
    电脑硬件——CPU散热器
    Mac下adb性能测试实战
    Linux笔记--硬链接与软链接
  • 原文地址:https://blog.csdn.net/qq_54423921/article/details/126065466