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. [2/100] MySQL在Windows下安装及一些问题

    mysql 是RDBMS(关系型数据库) 其他: redis 一般做缓存用 mangoDB 一般做爬虫用 国内镜像下载地址: http://mirrors.sohu.com/mysql/MySQL-8 ...

  2. mybatis源码探索笔记-3(使用代理mapper执行方法)

    前言 前面两章我们构建了SqlSessionFactory,并通过SqlSessionFactory创建了我们需要的SqlSession,并通过这个SqlSession获取了我们需要的代理mapper ...

  3. 关于 UIDatePicker 在iOS9 系统上的一个坑

    在使用 UIDatePicker时,在iOS9系统上上遇到一个很奇怪的问题,在其他系统版本中没发现,设置年月日格式显示的视图,在iOS9设备上出现中间月份无法显示的问题: 检查代码没问题,这个视图是使 ...

  4. java 使用poi 导入Excel 数据到数据库

    由于我个人电脑装的Excel是2016版本的,所以这地方我使用了XSSF 方式导入 . 1先手要制定一个Excel 模板 把模板放入javaWeb工程的某一个目录下如图: 2模板建好了后,先实现模板下 ...

  5. 100w并发产生唯一随机id

    #coding=utf-8 import time import base64 import getopt import sys import threading import random impo ...

  6. 「AHOI2014/JSOI2014」奇怪的计算器

    「AHOI2014/JSOI2014」奇怪的计算器 传送门 我拿到这题首先是懵b的,因为感觉没有任何性质... 后来经过同机房dalao的指导发现可以把所有的 \(X\) 放到一起排序,然后我们可以发 ...

  7. 关于java自学的内容及感受

    这周自学了关于java类的知识,进度有点慢,需要抓紧学习剩下的知识,放假后由于自制力差而各种玩没有认认真真的学习,下周要认真的学习之后的进度,争取开学玩全部完成! /** * 动物的类 * */pub ...

  8. JavaScript高级特征之面向对象笔记二

    Prototype 1.  当声明一个函数的时候,浏览器会自动为该函数添加一个属性prototype, 2.  该属性的默认值为{} 3.  可以动态的给prototype增加key和value值 4 ...

  9. centos将celery写入系统服务

    第一步: 在/etc/下创建目录 celery/celery.conf 代码如下: CELERYD_NODES='w1 w2 w3' # 启动的celery进程的进程名 CELERY_BIN='/ro ...

  10. 吴裕雄--天生自然PythonDjangoWeb企业开发:框架基础和技术选型

    简单的Web Server import socket eol1 = b'\n\n' eol2 = b'\n\r\n' body = '''Hello,world!<h1>tszrwyx& ...