Python数据分析–Numpy常用函数介绍(9)– 与线性代数有关的模块linalg

numpy.linalg 模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。
一、计算逆矩阵

线性代数中,矩阵A与其逆矩阵A ^(-1)相乘后会得到一个单位矩阵I。该定义可以写为A *A ^(-1) =1。numpy.linalg 模块中的 inv 函数可以计算逆矩阵。

1) 用 mat 函数创建示例矩阵

import numpy as np
import matplotlib.pyplot as plt

A = np.mat("0 1 2;1 0 3;4 -3 8")

2)用 inv 函数计算逆矩阵

inverse = np.linalg.inv(A)
print("inverse of An", inverse)

运行结果如下:

A
 [[ 0  1  2]
 [ 1  0  3]
 [ 4 -3  8]]
inverse of A
 [[-4.5  7.  -1.5]
 [-2.   4.  -1. ]
 [ 1.5 -2.   0.5]]

 3)可能通过原矩阵和逆矩阵相乘的结果来验证

print ("Checkn", A * inverse) #验证计算,原矩阵和逆矩阵相乘的,单位矩阵

结果:

Check
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

二、求解线性方程组

线性议程组  Ax=b

1)分另创建矩阵A和数组b

A = np.mat("1 -2 1;0 2 -8;-4 5 9") #用mat()函数创建示例矩阵
print("An", A)
b = np.array([0, 8, -9])

2)用solve(A, b)解出x,用dot()函数进行验证,并打印

x = np.linalg.solve(A, b)
print("Solution", x)
print("Checkn", np.dot(A , x)) #用dot()函数检查求得的解是否正确

三、特征值和特征向量

特征值(eigenvalue)即方程 Ax = ax 的根,是一个标量,特征向量是关于特征值的向量。在numpy.linalg 模块中, eigvals函数可以计算矩阵的特征值,而 eig 函数可以返回一个包含特征值和对应的特征向量的元组。

用 eigvals 函数求解特征值

用 eig 函数求解特征值和特征向量 ,如下代码:

print("Eigenvalues", np.linalg.eigvals(A))
eigenvalues, eigenvectors = np.linalg.eig(A)
print( "First tuple of eig", eigenvalues)
print(" Second tuple of eign", eigenvectors)

四、奇异值分解

奇异值分解,是一种因子分解运算,将一个矩阵分解为3个矩阵的乘积。奇异值分解是特征值分解一种推广。在 numpy.linalg 模块中的svd()函数可以对矩阵进行奇异值分解。该函数返回3个矩阵——U、Sigma和V,其中U和V是正交矩阵,Sigma包含输入矩阵的奇异值(计算出来结果可能是虚数)。

U, Sigma, V = np.linalg.svd(A, full_matrices=False)# 用svd() 函数分解矩阵
print ("U:",U)
print ("Sigma:",Sigma)
print ("V:", V)
print ("Productn", U * np.diag(Sigma) * V) #用diag函数生成完整的奇异值矩阵

 五、广义

pinv 函数进行求解,计算广义逆矩阵需要用到奇异值分解函数pinv(),行列式计算用np.linalg中的函数det(): 

#使用pinv函数计算广义逆矩阵:
A = np.mat("4 11 14;8 7 -2")
pseudoinv = np.linalg.pinv(A)
print("Pseudo inverse:n", pseudoinv)
#计算矩阵的行列式
print("n")
B = np.mat("3 4;5 6")
print("Determinant:", np.linalg.det(B))

全部代码如下:

import numpy as np
import matplotlib.pyplot as plt

A = np.mat("0 1 2;1 0 3;4 -3 8")  #用mat()函数创建示例矩阵
print ("An",A)
inverse = np.linalg.inv(A)  #用inv()函数计算逆矩阵
print("inverse of An", inverse)
print ("Checkn", A * inverse) #验证计算,原矩阵和逆矩阵相乘的,单位矩阵
#  求解线性方程组
A = np.mat("1 -2 1;0 2 -8;-4 5 9") #用mat()函数创建示例矩阵
b = np.array([0, 8, -9])
x = np.linalg.solve(A, b)
print("Solution", x)
print("Checkn", np.dot(A , x))  #用dot()函数检查求得的解是否正确
#特征值和特征向量

print("Eigenvalues", np.linalg.eigvals(A))   #eigvals函数可以计算矩阵的特征值
eigenvalues, eigenvectors = np.linalg.eig(A) #用 eig 函数求解特征值和特征向量
print( "First tuple of eig", eigenvalues)
print(" Second tuple of eign", eigenvectors)

#奇异值分解
U, Sigma, V = np.linalg.svd(A, full_matrices=False)# 用svd() 函数分解矩阵
print ("U:",U)
print ("Sigma:",Sigma)
print ("V:", V)
print ("Productn", U * np.diag(Sigma) * V) #用diag函数生成完整的奇异值矩阵
#使用pinv函数计算广义逆矩阵:
A = np.mat("4 11 14;8 7 -2")
pseudoinv = np.linalg.pinv(A)
print("Pseudo inverse:n", pseudoinv)
#计算矩阵的行列式
print("n")
B = np.mat("3 4;5 6")
print("Determinant:", np.linalg.det(B))

运行结果:

Python数据分析--Numpy常用函数介绍(9)-- 与线性代数有关的模块linalg

本篇介绍了一些numpy.linalg 模块中常用的函数,

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python数据分析–Numpy常用函数介绍(9)– 与线性代数有关的模块linalg - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python数据可视化-matplotlib入门(1)–安装及绘制简单的曲线

    一、安装matplotlib 1)由于已安装anaconda,可直接打开anaconda prompt,再用命令pip install matplotlib进行安装,因镜像问题,可能较慢,建议第2种方式。 2)访问https://pypi.org/project/matplotlib/#files,并查找与你使用的Python版本匹配的wheel文件(扩展名…

    2023年4月2日
    00
  • django基础02–一个基于数据库的小项目

    摘要:简单修改、增加部分页面,了解django开发的过程。(Python 3.9.12,django 4.0.4 ) 接前篇,通过命令: django-admin startproject myWebSite 创立了新的站点,cd myWebSite进入到站点根目录,并用命令python manage.py runserver 8080(或其他端口号) 就可…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(7)–Numpy中矩阵和通用函数

    在NumPy中,矩阵是 ndarray 的子类,与数学概念中的矩阵一样,NumPy中的矩阵也是二维的,可以使用 mat 、 matrix 以及 bmat 函数来创建矩阵。 一、创建矩阵 mat 函数创建矩阵时,若输入已为 matrix 或 ndarray 对象,则不会为它们创建副本。 因此,调用 mat() 函数和调用 matrix(data, copy=F…

    2023年4月2日
    00
  • python入门基础(3) 字符串、列表访问

    一、列表 列表由一系列按特定顺序排列的多个元素或空元素组成,包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;列表中各元素间可以没有任何关系;实际使用过程中,通常给列表指定一个表示复数的名称,如names,cars,letters,dog_names。 列表大多数是是动态的,列表创建后,将随着程序的运行,列表的长度,数值(或字符串值)都会不断变化,需…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(8)–Numpy中几中常见的图形

    在NumPy中,所有的标准三角函数如sin、cos、tan等均有对应的通用函数。 一、利萨茹曲线 (Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波器上显示出利萨茹曲线)。利萨茹曲线由以下参数方程定义: x = A sin(at + n/2) y = B sin(bt)利萨茹曲线的参数包括 A 、 B 、 a 和 b 。为简单…

    2023年4月2日
    00
  • python入门基础(1)—安装

      说明:0基础,那就先练习python语言基础知识,等基础知识牢固了,再对各开发平台分别进行介绍。这里只介绍两个简单而又容易搭建开发平台Anaconda和pycharm   Anaconda是一个开源的Python发行版本,包括Conda、Python以及一堆工具包,比如:numpy、pandas等等180多个科学包及其依赖项,因后期涉及数据处理及深度学习…

    2023年4月2日
    00
  • python数据可视化-matplotlib入门(3)-利用随机函数生成变化图形2

     鉴于上一篇中最后三个问题: 1、上述程序是否能进行优化(比如功能相同的) 2、创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就自动创建n个实例?同时,每个实例的num_times随机,(n比较大时,num_times应该比较小) 3、当实现上述功能后,程序运行,只输入一个参数(创建实例的个数),就会自动生成对应的num_times,并分别…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(4)–Numpy中的线性关系和数据修剪压缩

    摘要:总结股票均线计算原理–线性关系,也是以后大数据处理的基础之一,NumPy的 linalg 包是专门用于线性代数计算的。作一个假设,就是一个价格可以根据N个之前的价格利用线性模型计算得出。     前一篇,在计算均线,指数均线时,分别计算了不同的权重,比如 和 都是按不同的计算方法来计算出相关的权重,一个股价可以用之前股价的线性组合表示出来,也即,这个…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部