您需要使用的所有线性代数运算
在 NumPy 中用于机器学习。
名为 NumPy 的 Python 数值计算库提供了许多线性代数函数,这些函数可能对机器学习从业者有用。
在本教程中,您将发现用于处理向量和矩阵的关键函数,这些函数可能对机器学习从业者有用。
这是一份备忘单,所有示例都很简短,并假定您熟悉正在执行的操作。
您可能希望将此页面加入书签以供将来参考。
通过我的新书《机器学习线性代数》来启动您的项目,该书包含分步教程以及所有示例的Python源代码文件。
让我们开始吧。

机器学习线性代数速查表
照片由Christoph Landers拍摄,部分权利保留。
概述
本教程分为7个部分;它们是:
- 数组
- 向量
- 矩阵
- 矩阵类型
- 矩阵运算
- 矩阵分解
- 统计学
在机器学习线性代数方面需要帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
1. 数组
创建 NumPy 数组的方法有很多。
数组
1 2 |
from numpy import array A = array([[1,2,3],[1,2,3],[1,2,3]]) |
空
1 2 |
from numpy import empty A = empty([3,3]) |
零
1 2 |
from numpy import zeros A = zeros([3,5]) |
一
1 2 |
from numpy import ones A = ones([5, 5]) |
2. 向量
向量是标量的列表或列。
向量加法
1 |
c = a + b |
向量减法
1 |
c = a - b |
向量乘法
1 |
c = a * b |
向量除法
1 |
c = a / b |
向量点积
1 2 |
c = a.dot(b) c = a @ b |
向量-标量乘法
1 |
c = a * 2.2 |
向量范数
1 2 |
from numpy.linalg import norm l2 = norm(v) |
3. 矩阵
矩阵是标量的二维数组。
矩阵加法
1 |
C = A + B |
矩阵减法
1 |
C = A - B |
矩阵乘法(Hadamard 乘积)
1 |
C = A * B |
矩阵除法
1 |
C = A / B |
矩阵-矩阵乘法(点积)
1 2 |
C = A.dot(B) C = A @ B |
矩阵-向量乘法(点积)
1 2 |
C = A.dot(b) C = A @ b |
矩阵-标量乘法
1 2 |
C = A.dot(2.2) C = A * 2.2 |
4. 矩阵类型
不同类型的矩阵通常用作更广泛计算的元素。
三角矩阵
1 2 3 4 5 6 |
# 下三角 from numpy import tril lower = tril(M) # 上三角 from numpy import triu upper = triu(M) |
对角矩阵
1 2 |
from numpy import diag d = diag(M) |
单位矩阵
1 2 |
from numpy import eye I = eye(3) |
5. 矩阵运算
矩阵运算通常用作更广泛计算的元素。
矩阵转置
1 |
B = A.T |
矩阵求逆
1 2 |
from numpy.linalg import inv B = inv(A) |
矩阵迹
1 2 |
from numpy import trace B = trace(A) |
矩阵行列式
1 2 |
from numpy.linalg import det B = det(A) |
矩阵秩
1 2 |
from numpy.linalg import matrix_rank r = matrix_rank(A) |
6. 矩阵分解
矩阵分解是将矩阵分解为其组成部分,以简化其他操作并提高数值稳定性。
LU 分解
1 2 |
from scipy.linalg import lu P, L, U = lu(A) |
QR 分解
1 2 |
from numpy.linalg import qr Q, R = qr(A, 'complete') |
特征分解
1 2 |
from numpy.linalg import eig values, vectors = eig(A) |
奇异值分解
1 2 |
from scipy.linalg import svd U, s, V = svd(A) |
7. 统计
统计摘要了向量或矩阵的内容,并经常用作更广泛运算的组成部分。
平均值
1 2 |
from numpy import mean result = mean(v) |
方差
1 2 |
from numpy import var result = var(v, ddof=1) |
标准差
1 2 |
from numpy import std result = std(v, ddof=1) |
协方差矩阵
1 2 |
from numpy import cov sigma = cov(v1, v2) |
线性最小二乘法
1 2 |
from numpy.linalg import lstsq b = lstsq(X, y) |
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
NumPy API
其他备忘单
总结
在本教程中,您发现了一些对机器学习从业者有用的线性代数关键函数。
您是否还知道或使用过其他重要的线性代数函数?
在下面的评论中告诉我。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
非常有帮助!感谢您整理和分享这份备忘单。
很高兴知道它有帮助。
谢谢 Jason,它非常有帮助。我喜欢它!
谢谢 Matthew!
谢谢分享!内容很好。
感谢这份快速备忘单。非常有用!
谢谢。
谢谢 Jason,这非常有帮助。
很高兴听到这个消息!
你好。
感谢这份总结。
一个小建议
矩阵-标量乘法并非完全如此(至少在 Python 3.6 中是这样)
您可以使用 A*scalar(k) 或 np.dot (k)。
并且更合理的做法是遵守原始数学符号,而不是滥用函数用标量来调用它。
谢谢。
使用 @ 符号可以节省一些按键次数来进行点积
A@b
是的,你说得对。但仅在 Python 3.5 及更高版本中可用。