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
Was this helpful?