📅  最后修改于: 2020-04-19 12:47:49             🧑  作者: Mango
Numpy的线性代数模块提供了多种将线性代数应用于任何numpy数组的方法。
可以找到:
# 将numpy导入为np
import numpy as np
A = np.array([[6, 1, 1],
[4, -2, 5],
[2, 8, 7]])
# 矩阵的秩
print("A的秩:", np.linalg.matrix_rank(A))
print("\nA的迹:", np.trace(A))
# 矩阵的行列式
print("\nA的行列式:", np.linalg.det(A))
# 矩阵A的逆
print("\n矩阵A的逆:\n", np.linalg.inv(A))
print("\n矩阵A的3次方:\n",
np.linalg.matrix_power(A, 3))
输出:
"A的秩: 3
A的迹: 11
A的行列式: -306.0
矩阵A的逆:
[[ 0.17647059 -0.00326797 -0.02287582]
[ 0.05882353 -0.13071895 0.08496732]
[-0.11764706 0.1503268 0.05228758]]
矩阵A的3次方:
[[336 162 228]
[406 162 469]
[698 702 905]]
numpy.linalg.eigh(a,UPLO =’L’):此函数用于返回复杂的Hermitian(共轭对称)或实对称矩阵的特征值和特征向量,返回两个对象,一个包含的特征值,以及相应特征向量的二维平方数组或矩阵(取决于输入类型)。
# Python程序解释eigh()函数
from numpy import linalg as eigen
# 使用array函数创建数组
a = np.array([[1, -2j], [2j, 5]])
print("数组为 :",a)
# 使用eigh()函数计算特征值
c, d = eigen.eigh(a)
print("特征值:", c)
print("特征值 :", d)
输出:
数组为 : [[ 1.+0.j, 0.-2.j],
[ 0.+2.j, 5.+0.j]]
特征值 : [ 0.17157288, 5.82842712]
特征值 : [[-0.92387953+0.j , -0.38268343+0.j ],
[ 0.00000000+0.38268343j, 0.00000000-0.92387953j]]
numpy.linalg.eig(a):此函数用于计算正方形数组的特征值和右特征向量。
# Python程序解释eig()函数
from numpy import linalg as eigen
# 使用diag函数创建数组
a = np.diag((1, 2, 3))
print("数组为 :",a)
# 使用eig()函数计算特征值
c, d = eigen.eig(a)
print("特征值 :",c)
print("特征值 :",d)
输出:
数组为: [[1 0 0],
[0 2 0],
[0 0 3]]
特征值 : [ 1 2 3]
特征值 : [[ 1 0 0],
[ 0 1 0],
[ 0 0 1]]
函数 | 描述 |
---|---|
linalg.eigvals() | 计算通用矩阵的特征值。 |
linalg.eigvalsh(a [,UPLO]) | 计算一个复杂的Hermitian或实对称矩阵的特征值。 |
numpy.dot(vector_a,vector_b,out = None):返回向量a和b的点积。它可以处理2D数组,但将其视为矩阵,并将执行矩阵乘法。对于N维,它是a的最后一个轴和b的倒数第二个轴的和积:
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
代码1:
# Python程序说明numpy.dot()方法
import numpy as eigen
# 标量
product = eigen.dot(5, 4)
print("标量值的点积 : ", product)
# 一维阵列
vector_a = 2 + 3j
vector_b = 4 + 5j
product = eigen.dot(vector_a, vector_b)
print("点积 : ", product)
输出:
标量值的点积 : 20
点积 : (-7+22j)
代码1如何工作?
vector_a = 2 + 3j
vector_b = 4 + 5j
点积
= 2(4 + 5j) + 3j(4 - 5j)
= 8 + 10j + 12j - 15
= -7 + 22j
numpy.vdot(vector_a,vector_b):返回向量a和b的点积。如果第一个参数是复数,则将第一个参数的复共轭(这是方法的vdot()
不同之处dot()
)用于点积的计算。它可以处理多维数组,但可以作为扁平数组处理。
代码1:
# Python程序说明numpy.vdot()方法
import numpy as eigen
# 一维阵列
vector_a = 2 + 3j
vector_b = 4 + 5j
product = eigen.vdot(vector_a, vector_b)
print("点积 : ", product)
输出:
点积 : (23-2j)
代码1如何工作?
vector_a = 2 + 3j
vector_b = 4 + 5j
按照方法,取vector_a的共轭,即2-3j
现在点积= 2(4-5j)+ 3j(4-5j)
= 8-10j + 12j + 15
= 23-2j
函数 | 描述 |
---|---|
matmul() | 两个数组的矩阵乘积。 |
inner() | 两个数组的内积。 |
outer() | 计算两个向量的外积。 |
linalg.multi_dot() | 在一个函数调用中计算两个或多个数组的点积,同时自动选择最快的评估顺序。 |
tensordot() | 沿指定轴计算> = 1-D的张量点积。 |
einsum() | 在操作数上评估爱因斯坦求和约定。 |
einsum_path() | 通过考虑创建中间数组来评估einsum表达式的最低成本收缩顺序。 |
linalg.matrix_power() | 将矩阵提的每个元素,计算n(整数)次幂。 |
kron() | 两个阵列的Kronecker乘积。 |
numpy.linalg.solve():求解线性矩阵方程或线性标量方程组。计算确定的(即满秩)线性矩阵方程ax = b的“精确”解x。
# Python程序说明numpy.linalg.solve()方法
import numpy as np
# 使用array函数创建数组
a = np.array([[1, 2], [3, 4]])
# 使用array函数创建数组
b = np.array([8, 18])
print(("线性方程的解:",
np.linalg.solve(a, b)))
输出:
线性方程的解: [ 2. 3.]
numpy.linalg.lstsq():将最小二乘解返回线性矩阵方程。通过计算最小化欧几里德2-范数的向量x来解决方程ax = b。该方程可以是欠确定的,良好确定的或过度确定的(即a的线性独立行的数量可以小于,等于或大于其线性独立列的数量)。如果a为平方且为全秩,则x(但针对四舍五入误差)是方程式的“精确”解。
# Python程序说明numpy.linalg.lstsq()方法
import numpy as np
import matplotlib.pyplot as plt
# x坐标
x = np.arange(0, 9)
A = np.array([x, np.ones(9)])
# 线性产生的序列
y = [19, 20, 20.5, 21.5, 22, 23, 23, 25.5, 24]
# 获得回归线的参数
w = np.linalg.lstsq(A.T, y)[0]
# 画线
line = w[0]*x + w[1] # regression line
plt.plot(x, line, 'r-')
plt.plot(x, y, 'o')
plt.show()
输出:
函数 | 描述 |
---|---|
numpy.linalg.tensorsolve() | 对x求解张量方程ax = b。 |
numpy.linalg.inv() | 计算矩阵的(乘法)逆。 |
numpy.linalg.pinv() | 计算矩阵的(Moore-Penrose)伪逆。 |
numpy.linalg.tensorinv() | 计算N维数组的“逆”。 |
numpy.linalg.det():计算数组的行列式。
# Python程序说明numpy.linalg.det()方法
import numpy as np
# 使用数组方法创建数组
A = np.array([[6, 1, 1],
[4, -2, 5],
[2, 8, 7]])
print(("\nA的行列式:"
, np.linalg.det(A)))
输出:
A的行列式: -306.0
numpy.trace():返回沿数组对角线的和。如果a为2 -D,则返回沿其对角线的和具有给定偏移量,即,所有元素a [i,i + offset]的和i。如果a具有多个二维,则使用axis1和axis2指定的轴来确定要返回其迹线的2-D子数组。所得数组的形状与除去了轴1和轴2的a的形状相同。
# Python程序说明numpy.trace()()方法
import numpy as np
# 使用数组方法创建数组
A = np.array([[6, 1, 1],
[4, -2, 5],
[2, 8, 7]])
print("\nA的迹:", np.trace(A))
输出:
A的痕迹: 11
函数 | 描述 |
---|---|
numpy.linalg.norm() | 矩阵或向量范数。 |
numpy.linalg.cond() | 计算矩阵的条件数。 |
numpy.linalg.matrix_rank() | 使用SVD方法返回数组的矩阵秩 |
numpy.linalg.cholesky() | 胆固醇分解。 |
numpy.linalg.qr() | 计算矩阵的qr因式分解。 |
numpy.linalg.svd() | 奇异值分解。 |