文章目录
Matrix
在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 [1] ,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出
在numpy中,我们知道了第一种数据类型,数组ndarry,而矩阵则是另一种数据存储形式,矩阵matrix。
区别:
- 在数组中数据只能够以列表形式用逗号分割
创建(转换)矩阵(mat)
一般我们先创建数组,然后将其转化为矩阵
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))

import numpy as np
# zeros
a = np.mat(np.zeros((2,2)))
print(a)
print("*"*10)
# ones
a = np.mat(np.ones((2,2)))
print(a)
print("*"*10)
# empty
a = np.mat(np.empty((2,2)),dtype=float)
print(a)
print("*"*10)
# eye
a = np.mat(np.eye(3))
print(a)
print("*"*10)

矩阵运算
数据
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],
])
| 方法 | 作用 |
|---|---|
| dot | 两个数组相乘 (点积) |
| vdot | 两个向量相乘(点积) |
| inner | 两个数组的内积 |
| matmul | 两个数组的矩阵积 |
| determinant | 求数组的行列式 |
| solve | 求解线性矩阵方程 |
| inv | 计算矩阵的乘法逆矩阵 |
dot和vdot(点积)
点积在数学中,又称数量积(dot product; scalar product),是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积
# 求点积
print(np.dot(mat1,mat2))

inner(内积)
矩阵的内积参照向量的内积的定义是:两个向量对应分量乘积之和
# 求内积
print(np.inner(mat1, mat2))

matmul(矩阵积)
# 求矩阵积
print(np.matmul(mat1, mat2))

线性代数函数库 linalg
矩阵和向量积
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]))

matrix_power(矩阵幂运算)
取一个方阵的(整数)n次方
np.linalg.matrix_power(data, n)
- data :需要计算矩阵
- 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))

分解
cholesky(柯列斯基分解)
计算矩阵的柯列斯基分解
np.linalg.cholesky(np.matrix(A))
>>> A = np.array([[1,-2j],[2j,5]])
>>> A
array([[ 1.+0.j, -0.-2.j],
[ 0.+2.j, 5.+0.j]])
>>> L = np.linalg.cholesky(A)
>>> L
array([[1.+0.j, 0.+0.j],
[0.+2.j, 1.+0.j]])
>>> np.dot(L, L.T.conj()) # verify that L * L.H = A
array([[1.+0.j, 0.-2.j],
[0.+2.j, 5.+0.j]])
>>> A = [[1,-2j],[2j,5]] # what happens if A is only array_like?
>>> np.linalg.cholesky(A) # an ndarray object is returned
array([[1.+0.j, 0.+0.j],
[0.+2.j, 1.+0.j]])
>>> # But a matrix object is returned if A is a matrix object
>>> np.linalg.cholesky(np.matrix(A))
matrix([[ 1.+0.j, 0.+0.j],
[ 0.+2.j, 1.+0.j]])
qr (qr分解)
计算矩阵的qr分解
np.linalg.qr(mat1)
import numpy as np
mat1 = np.mat(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
])
q, r = np.linalg.qr(mat1)
print(q)
print(r)

svd(奇异值分解)
奇异值分解
np.linalg.svd(a, full_matrices=True, compute_uv=True, hermitian=False)
Examples
--------
>>> a = np.random.randn(9, 6) + 1j*np.random.randn(9, 6)
>>> b = np.random.randn(2, 7, 8, 3) + 1j*np.random.randn(2, 7, 8, 3)
Reconstruction based on full SVD, 2D case:
>>> u, s, vh = np.linalg.svd(a, full_matrices=True)
>>> u.shape, s.shape, vh.shape
((9, 9), (6,), (6, 6))
>>> np.allclose(a, np.dot(u[:, :6] * s, vh))
True
>>> smat = np.zeros((9, 6), dtype=complex)
>>> smat[:6, :6] = np.diag(s)
>>> np.allclose(a, np.dot(u, np.dot(smat, vh)))
True
Reconstruction based on reduced SVD, 2D case:
>>> u, s, vh = np.linalg.svd(a, full_matrices=False)
>>> u.shape, s.shape, vh.shape
((9, 6), (6,), (6, 6))
>>> np.allclose(a, np.dot(u * s, vh))
True
>>> smat = np.diag(s)
>>> np.allclose(a, np.dot(u, np.dot(smat, vh)))
True
Reconstruction based on full SVD, 4D case:
>>> u, s, vh = np.linalg.svd(b, full_matrices=True)
>>> u.shape, s.shape, vh.shape
((2, 7, 8, 8), (2, 7, 3), (2, 7, 3, 3))
>>> np.allclose(b, np.matmul(u[..., :3] * s[..., None, :], vh))
True
>>> np.allclose(b, np.matmul(u[..., :3], s[..., None] * vh))
True
Reconstruction based on reduced SVD, 4D case:
>>> u, s, vh = np.linalg.svd(b, full_matrices=False)
>>> u.shape, s.shape, vh.shape
((2, 7, 8, 3), (2, 7, 3), (2, 7, 3, 3))
>>> np.allclose(b, np.matmul(u * s[..., None, :], vh))
True
>>> np.allclose(b, np.matmul(u, s[..., None] * vh))
True
"""
矩阵特征值
eig(特征值)
计算一个方阵的特征值和右特征向量
np.linalg.eig(mat1)
import numpy as np
mat1 = np.mat(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
])
w, v = np.linalg.eig(mat1)
print(w)
print(v)

eigh
返回复厄米特矩阵的特征值和特征向量(共轭对称)或实对称矩阵。
np.linalg.eigh(a, UPLO=‘L’)
w, v = np.linalg.eigh(mat1)
print(w)
print(v)

eigvals
eigvalsh
规范及其他数字
norm
cond
det
matrix_rank
slogdet
解方程和逆矩阵
solve
tensorsolve
lstsq
inv
pinv
tensorinv
注
- 后续会不断完善更新
414

被折叠的 条评论
为什么被折叠?



