8.4 线性代数

8.4.1 SciPy与线性代数

当使用优化的ATLAS LAPACK和BLAS库构建SciPy时,它具有非常快的线性代数能力。如果你挖得足够深,所有的原始lapack和blas库都可以为你提供更快的速度。在本节中,将描述这些例程的一些易于使用的接口。所有这些线性代数例程都期望一个对象可以转换成二维数组。这些例程的输出也是一个二维数组。

8.4.2 矩阵运算

我们首先来创建个的np矩阵A和一个的行向量b

A=array([[1, 2],

[3, 4]])

b= array([[5, 6]])

矩阵求逆

>>> linalg.inv(A)

array([[-2. , 1. ],

[ 1.5, -0.5]])

矩阵转置

b.T

array([[5],

[6]])

矩阵乘法

>>> A*b #not matrix multiplication!

array([[ 5, 12],

[15, 24]])

数乘矩阵

>>> A.dot(b.T) #matrix multiplication

array([[17],

[39]])

8.6.3 计算行列式

在scipy中,行列式可以用linalg.det计算。

linalg.det(A)

-2.0

8.6.4 计算范数

矩阵和向量范数也可以用scipy计算。对于linalg.norm的order参数,使用不同的参数可以获得广泛的norm定义。此函数接受一个秩1(向量)或秩2(矩阵)数组和一个可选的顺序参数(默认值为2)。根据这些输入,计算出所请求顺序的向量或矩阵范数。

>>> import numpy as np

>>> from scipy import linalg

>>> A=np.array([[1,2],[3,4]])

>>> A

array([[1, 2],

[3, 4]])

norm()函数默认求frobenius范数。

>>> linalg.norm(A)

5.4772255750516612

可以通过在norm()函数中加入第二个参数来求其他范数。

例如:求矩阵A的L1范数

>>> linalg.norm(A,1) # L1 norm (max column sum)

求矩阵Ade 无穷范数

>>> linalg.norm(A,np.inf) # L inf norm (max row sum)

7

8.6.7 矩阵函数

考虑函数f(x)用泰勒级数展开

对于方阵A,可以用泰勒级数定义矩阵函数为:

虽然这是矩阵函数的一种有用表示,但它很少是计算矩阵函数的最佳方法。

8.6.8 特殊矩阵

SciPy和NumPy为创建工程和科学中经常使用的特殊矩阵提供了几个函数。

类型
方程
描述

block diagonal

从提供的数组中创建一个块对角矩阵

circulant

构造一个循环矩阵

companion

创建一个伙伴矩阵。

Hadamard

构造一个哈达玛矩阵。

Hankel

构造汉克尔矩阵。

Hilbert

构造一个希尔伯特矩阵。

Inverse Hilbert

构造希尔伯特矩阵的逆。

Leslie

创建一个莱斯利矩阵。

Pascal

创建一个帕斯卡矩阵。

Toeplitz

构造一个托普利兹矩阵。

Van der Monde

生成一个范德蒙德矩阵。

有关这些函数的使用示例,请参见它们各自的文档字符串。

Last updated

Was this helpful?