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为创建工程和科学中经常使用的特殊矩阵提供了几个函数。

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

Last updated