numpy-线代和矩阵
numpy-线代和矩阵
创建(转换)矩阵
一般我们先创建数组,然后将其转化为矩阵
np.mat(data, dtype=None)
data: 数据或者数组
dtype: 数据格式
import numpy as np
arr1 = np.array(
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
)
print(type(arr1))
a = np.mat(arr1)
print(type(a))
矩阵运算
函数 | 说明 | |
---|---|---|
点积 | np.dot(a,b) |
求解两个数组的点积 |
点积 | np.vdot(a,b) |
求解两个向量的点积 |
内积 | np.inner(a,b) |
求解两个数组的内积 |
外积 | np.outer(a,b) |
求解两个向量的外积 |
矩阵积 | np.matmul(a,b) |
求解两个数组的矩阵乘积 |
np.tensordot(a,b) |
求解张量点积 | |
np.kron(a,b) |
计算 Kronecker 乘积 |
numpy.dot(a,b) 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为向量点积)
对于多维数组,则是计算每个元素相关的
import numpy.matlib
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print(np.dot(a,b))
[[37 40]
[85 92]]
计算式为 [[1*11+2*13,1*12+2*14],[3*11+4*13,3*12+4*14]]
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
# vdot 将数组展开计算内积
print (np.vdot(a,b))
130
计算式为 1*11+2*12+3*13+4*14 = 130
numpy.inner(a,b) 函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积。
import numpy as np
print (np.inner(np.array([1,2,3]),np.array([0,1,0])))
# 2
# 等价于 1*0+2*1+3*0
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[11, 12], [13, 14]])
print(b)
print(np.inner(a, b))
[[35 41]
[81 95]]
计算公式
1*11+2*12, 1*13+2*14
3*11+4*12, 3*13+4*14
numpy.matmul(a,b) 函数返回两个数组的矩阵乘积。
import numpy.matlib
import numpy as np
a = [[1,0],[0,1]]
b = [[4,1],[2,2]]
print (np.matmul(a,b))
[[4 1]
[2 2]]
np.linalg线代函数库
函数 | 说明 | |
---|---|---|
np.linalg.multi_dot() | 矩阵相乘 | |
np.linalg.matrix_power(data, n) | 矩阵幂运算 | |
np.linalg.cholesky(np.matrix(A)) | 矩阵相乘 | |
np.linalg.qr(mat1) | qr分解 | |
p.linalg.svd(a) | 奇异值分解 | |
np.linalg.eig(mat1) | 计算一个方阵的特征值和右特征向量 | |
np.linalg.eigh(a, UPLO=‘L’) | 复厄米特矩阵的特征值和特征向量 |
涉及计算线性方程组、矩阵分解、矩阵计算、矩阵求逆、广义逆矩阵等
参考资料 https://www.python100.com/html/89577.html
multi_dot(矩阵相乘) 计算单个函数调用中两个或多个数组的点积,自动选择最快的评估顺序。
import numpy as np
mat1 = np.mat(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
])
mat2 = np.mat(
[
[11,12, 13],
[14, 15, 16],
[17, 18, 19],
])
# 点积
print(np.linalg.multi_dot([mat1, mat2]))
[[ 90 96 102]
[216 231 246]
[342 366 390]]
np.linalg.matrix_power(data, n) 取一个方阵的(整数)n次方
import numpy as np
mat1 = np.mat(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
])
mat2 = np.mat(
[
[11,12, 13],
[14, 15, 16],
[17, 18, 19],
])
# 求矩阵幂
print(np.linalg.matrix_power(mat1, 3))
[[ 468 576 684]
[1062 1305 1548]
[1656 2034 2412]]
np.matlib矩阵函数库
函数 | 说明 | |
---|---|---|
numpy.matlib.empty() | 返回一个新的矩阵 | |
zeros | numpy.matlib.zeros() | 创建一个以 0 填充的矩阵 |
ones | numpy.matlib.ones() | 创建一个以 1 填充的矩阵 |
eye | numpy.matlib.eye() | 返回一个矩阵,对角线元素为 1,其他位置为零 |
identity | numpy.matlib.identity() | 返回给定大小的单位矩阵 |
rand | numpy.matlib.rand() | 创建一个给定大小的矩阵,数据是随机填充的 |
numpy.matlib.zeros()函数创建一个以 0 填充的矩阵。
import numpy.matlib
import numpy as np
print (np.matlib.zeros((2,2)))
# 输出结果为:
[[0. 0.]
[0.0.]]
numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
numpy.matlib.eye(n, M,k, dtype)
n: 返回矩阵的行数
M: 返回矩阵的列数,默认为 n
k: 对角线的索引
dtype: 数据类型
import numpy.matlib
import numpy as np
print (np.matlib.eye(n = 3, M = 4, k = 0, dtype = float))
numpy.matlib.ones()函数创建一个以 1 填充的矩阵。
import numpy.matlib
import numpy as np
print (np.matlib.ones((2,2)))
[[1. 1.]
[1. 1.]]
numpy.matlib.identity() 函数返回给定大小的单位矩阵。
import numpy.matlib
import numpy as np
# 大小为 5,类型位浮点型
print (np.matlib.identity(5, dtype = float))
# 执行结果
[[ 1. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0.]
[ 0. 0. 1. 0. 0.]
[ 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 1.]]
参考资料
https://zhuanlan.zhihu.com/p/609111535
https://geek-docs.com/numpy/numpy-tutorials/numpy-matrix.html