SciPy线性代数包是使用优化的ATLAS LAPACK和BLAS库构建的,具有高效的线性代数运算能力。

线性代数包里的函数,操作对象都是二维数组。

SciPy.linalg 与 NumPy.linalg

与NumPy.linalg相比,scipy.linalg除了包含numpy.linalg中的所有函数,还具有numpy.linalg中没有的高级功能。

线性方程组求解

scipy.linalg.solve 函数可用于解线性方程。例如,对于线性方程$a * x + b * y = z$,求出未知数x, y值。

示例

解下面的联立方程组:

$$

x + 3y + 5z = 10 \

2x + 5y + z = 8 \

2x + 3y + 8z = 3

$$

上面的方程组,可以用矩阵表示为:

$$

\left[

\begin{matrix}

1 & 3 & 5 \

2 & 5 & 1 \

2 & 3 & 8

\end{matrix}

\right]

\left[

\begin{matrix}

x \

y \

z

\end{matrix}

\right] =

\left[

\begin{matrix}

10 \

8 \

3

\end{matrix}

\right]

$$

利用矩阵求解上面方程组,如下图所示:

$$

\left[

\begin{matrix}

x \

y \

z

\end{matrix}

\right]

=

\left[

\begin{matrix}

1 & 3 & 5 \

2 & 5 & 1 \

2 & 3 & 8

\end{matrix}

\right]^{-1}

\left[

\begin{matrix}

10 \

8 \

3

\end{matrix}

\right]

= \frac{1}{25}

\left[

\begin{matrix}

-232 \

129 \

19

\end{matrix}

\right]

=

\left[

\begin{matrix}

-9.28 \

5.16 \

0.76

\end{matrix}

\right]

$$

下面我们使用scipy来求解。

scipy.linalg.solve函数接受两个输入,数组a和数组b,数组a表示系数,数组b表示等号右侧值,求出的解将会放在一个数组里返回。

让我们考虑下面的例子。

# 导入scipy和numpy包
from scipy import linalg
import numpy as np # 声明numpy数组
a = np.array([[1, 3, 5], [2, 5, 1], [2, 3, 8]])
b = np.array([10, 8, 3]) # 求解
x = linalg.solve(a, b) # 输出解值
print (x)

输出

[-9.28  5.16  0.76]

计算行列式

矩阵A的行列式表示为$|A|$,行列式计算是线性代数中的常见运算。

SciPy中,可以使用det()函数计算行列式,它接受一个矩阵作为输入,返回一个标量值,即该矩阵的行列式值。

示例

# 导入scipy和numpy包
from scipy import linalg
import numpy as np # 声明numpy数组
A = np.array([[3,4],[7,8]]) # 计算行列式
x = linalg.det(A) # 输出结果
print (x)

输出

-4.0

求取特征值与特征向量

求取矩阵的特征值、特征向量,也是线性代数中的常见计算。

通常,可以根据下面的关系,求取矩阵(A)的特征值(λ)、特征向量(v):

$$ Av = λv $$

scipy.linalg.eig 函数可用于计算特征值与特征向量,函数返回特征值和特征向量。

示例

# 导入scipy和numpy包
from scipy import linalg
import numpy as np # 声明numpy数组
A = np.array([[3,4],[7,8]]) # 求解
l, v = linalg.eig(A) # 打印特征值
print('特征值')
print (l) # 打印特征向量
print('特征向量')
print (v)

上面的程序将生成以下输出。

特征值
[-0.35234996+0.j 11.35234996+0.j]
特征向量
[[-0.76642628 -0.43192981]
[ 0.64233228 -0.90190722]]

SVD奇异值分解

奇异值分解(SVD)是现在比较常见的算法之一,也是数据挖掘工程师、算法工程师必备的技能之一。 假设A是一个$M×N$的矩阵,那么通过矩阵分解将会得到$U,Σ,VT$(V的转置)三个矩阵,其中U是一个$M×M$的方阵,被称为左奇异向量,方阵里面的向量是正交的;Σ是一个$M×N$的对角矩阵,除了对角线的元素其他都是0,对角线上的值称为奇异值;$VT$(V的转置)是一个$N×N$的矩阵,被称为右奇异向量,方阵里面的向量也都是正交的。

$$ A_{m\times{n}} = U_{m\times{m}} Σ_{m\times{n}} V_{n\times{n}}^T$$

让我们考虑下面的例子。

# 导入scipy和numpy包
from scipy import linalg
import numpy as np # 声明numpy数组
a = np.random.randn(3, 2) + 1.j*np.random.randn(3, 2) # 输出原矩阵
print('原矩阵')
print(a) # 求解
U, s, Vh = linalg.svd(a) # 输出结果
print('奇异值分解')
print(U, "#U")
print(Vh, "#Vh")
print(s, "#s")

上面的程序将生成以下输出。

原矩阵
[[ 1.81840014+0.16615057j -0.47446573-2.36327076j]
[-0.19366846-0.44489565j -0.03227288+0.02260894j]
[-0.91921239-0.99340761j -1.33606096+0.40858722j]]
奇异值分解
[[-0.84399035+0.03548862j -0.1574924 +0.44602345j 0.08723906-0.23466874j]
[ 0.03893388+0.08672055j -0.19156838-0.45118633j -0.02718865-0.86600053j]
[ 0.23121352+0.47320699j -0.71944217+0.13562682j 0.41089761+0.13336765j]] #U
[[-0.63461867+0.j 0.05670247+0.77074248j]
[ 0.77282543+0.j 0.04656219+0.63290822j]] #Vh
[3.55734783 0.7144458 ] #s

SciPy 线性代数的更多相关文章

  1. scipy科学计算库

    特定函数 例贝塞尔函数: 积分 quad,dblquad,tplquad对应单重积分,双重积分,三重积分 from scipy.integrate import quad,dblquad,tplqua ...

  2. SciPy 信号处理

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  3. SciPy 统计

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  4. SciPy 图像处理

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  5. SciPy 优化

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  6. SciPy 积分

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  7. SciPy 插值

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  8. SciPy 输入输出

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  9. SciPy 常量

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

随机推荐

  1. from flyai.dataset import Dataset 报错

    from flyai.dataset import Dataset 报错 No module name 'flyai' ​ 先找到ide中使用的Python对应的pip的位置. ​ windows用户 ...

  2. stm32 串口发送字符串丢失第一个字节

    使用stm32f103调试串口通讯时,上电后发送的字符串的第一个字节丢失. 发送数据GpuSend("SPG(2);"); 接收端收到的数据为:PG(2);,第一个字符丢失. 出现 ...

  3. DB开启 Service Broker,使用消息队列

    ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;; ALTER DATABASE [DBNAME] SET TRUS ...

  4. Verilog状态机

    以1011为例 代码如下: //1011(Meay型) module state1(clk,in,rst_n,out); input clk; input rst_n; input in; outpu ...

  5. pytest框架,使用print在控制台输入

    代码示例: import pytest@pytest.fixture(autouse=True,scope='session') #autouse=True,scope='session'def se ...

  6. 五 Action访问方法,method配置,通配符(常用),动态

    1 通过method配置(有点low) 建立前端JSP:demo4.jsp <%@ page language="java" contentType="text/h ...

  7. spring boot 中的配置文件可以存放的位置

  8. day 11 笔记

    # 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数 万能参数 # 装饰器的作用 # 原则 :开放封闭原则 # 语法糖 :@ # 装饰器的固定模式 #不懂技术 import time # ...

  9. 【原】Web Polygraph 安装

    1.下载 # wget http://www.web-polygraph.org/downloads/srcs/polygraph-4.3.2-src.tgz 2.解压 # tar zxvf poly ...

  10. 夯实Java基础(二十一)——Java反射机制

    1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...