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. C++11常用特性介绍——decltype关键字

    一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...

  2. Python 基础之文件操作与文件的相关函数

    一.文件操作 fp =open("文件名",mode="采用的模式",encoding="使用什么编码集")fp 这个变量接受到open的返 ...

  3. Thread的join方法

    一个线程在执行的过程中,可能调用另一个线程,前者可以称为调用线程,后者成为被调用线程. Thread.Join方法的使用场景:调用线程挂起,等待被调用线程执行完毕后,继续执行. 如下案列: 当NewT ...

  4. app生命周期之即将关闭

    需求:当软件正在进行任务还未结束时,如果用户强制退出软件,需要将一些数据进行保存等处理. 策略:当用户使用多任务将软件挂起,并滑掉软件时,接下来有5妙钟的时间留给软件做处理.会调用- (void)ap ...

  5. 什么是 SDK?

    通俗而言: 1.其实很简单,SDK 就是 Software Development Kit 的缩写,中问意思是: 软件开发工具包. 2.这是一个覆盖面相当广泛的名词,可以这么说: 辅助开发某一类软件的 ...

  6. 13 JavaScript Array对象&Boolean对象&Math对象&RegExp对象

    万物皆对象,数组是对象,数组可以存储元素,函数,数组等对象 创建数组的三个方式: 常规方式:var myCars = new Array(); 简介方式:var myCars = new Arrray ...

  7. 在IDEA中为SpringBoot配置热部署

    版本:IDEA Community 2019.2.2,Spring Boot  2.1.8.RELEASE 流程:pom文件中添加依赖: <dependency> <groupId& ...

  8. 1014 Waiting in Line (30分)

    1014 Waiting in Line (30分)   Suppose a bank has N windows open for service. There is a yellow line i ...

  9. 建设基于TensorFlow的深度学习环境

    一.使用yum安装git 1.查看系统是否已经安装git git --version 2.yum 安装git yum install git 3.安装成功 git --version 4.进入指定目录 ...

  10. 【PAT甲级】1025 PAT Ranking (25 分)(结构体排序,MAP<string,int>映射)

    题意: 输入一个正整数N(N<=100),表示接下来有N组数据.每组数据先输入一个正整数M(M<=300),表示有300名考生,接下来M行每行输入一个考生的ID和分数,ID由13位整数组成 ...