🤔 什么是线性代数?
线性代数听起来很高深,其实就是研究数字怎么排队、怎么变换的学问。
想象你在整理书架:
- 书可以按行排列(横着排)
- 也可以按列排列(竖着排)
- 还可以整体移动、旋转书架
线性代数就是研究这些"排列"和"变换"的数学工具。
📊 向量:带方向的数字
🎯 生活中的向量
例子1:导航
- "向前走100米,再向右转走50米"
- 这可以用向量表示:(100, 50)
- 第一个数字表示前后方向,第二个表示左右方向
例子2:速度
- 汽车以60km/h向东行驶
- 速度向量:(60, 0) —— 只有东西方向的分量
💻 Python中的向量
import numpy as np
# 创建一个向量(其实是1维数组)
velocity = np.array([60, 0]) # 向东60km/h
displacement = np.array([100, 50]) # 位移向量
print(f"速度向量: {velocity}")
print(f"位移向量: {displacement}")
# 向量的长度(模)
speed = np.linalg.norm(velocity)
distance = np.linalg.norm(displacement)
print(f"速度大小: {speed} km/h")
print(f"位移距离: {distance:.2f} m")
📋 矩阵:数字的表格
🏪 超市的例子
想象一个小超市的商品价格表:
| 商品 | 苹果 | 香蕉 | 橙子 |
|---|---|---|---|
| 价格 | 5元 | 3元 | 4元 |
用矩阵表示就是:
价格矩阵 = [5, 3, 4]
如果有多个商店的价格不同:
| 商店 | 苹果 | 香蕉 | 橙子 |
|---|---|---|---|
| 店A | 5元 | 3元 | 4元 |
| 店B | 6元 | 2元 | 5元 |
矩阵表示:
[[5, 3, 4],
[6, 2, 5]]
🔄 矩阵的魔法:变换
矩阵最厉害的地方是可以一次性对很多数据进行相同的操作。
例子:图片变暗
import numpy as np
# 假设这是一张黑白图片的像素值(0-255)
image = np.array([[100, 150, 200],
[50, 75, 100],
[25, 125, 225]])
print("原图片:")
print(image)
# 让图片变暗:每个像素乘以0.5
darken_matrix = np.array([[0.5, 0, 0],
[0, 0.5, 0],
[0, 0, 0.5]])
dark_image = image * 0.5 # 广播机制,每个元素都乘以0.5
print("\n变暗后:")
print(dark_image.astype(int))
➕ 矩阵运算:像搭积木
1️⃣ 矩阵加法:对应位置相加
[1, 2] + [5, 6] = [6, 8]
[3, 4] [7, 8] [10, 12]
2️⃣ 矩阵乘法:行乘列
这是最重要的运算!
规则:结果矩阵的第i行第j列 = 第一个矩阵第i行 · 第二个矩阵第j列
import numpy as np
# 学生成绩例子
# 矩阵A:3个学生,2门课的平时成绩
scores_hw = np.array([[80, 90], # 学生1:作业80分,小测90分
[70, 85], # 学生2:作业70分,小测85分
[90, 95]]) # 学生3:作业90分,小测95分
# 矩阵B:2门课,权重(作业占40%,小测占60%)
weights = np.array([[0.4], # 作业权重
[0.6]]) # 小测权重
# 计算最终成绩:平时成绩 × 权重
final_scores = scores_hw @ weights # @ 符号表示矩阵乘法
print("平时成绩:")
print(scores_hw)
print("\n权重:")
print(weights)
print("\n最终成绩:")
print(final_scores)
输出:
平时成绩:
[[80 90]
[70 85]
[90 95]]
权重:
[[0.4]
[0.6]]
最终成绩:
[[86.]
[79.]
[93.]]
看到了吗?矩阵乘法让我们一次性算出了所有学生的加权平均分!
🧠 为什么机器学习需要线性代数?
🎯 数据的天然结构
机器学习中的数据天然就是矩阵形式:
# 假设我们有房价数据
# 特征:面积(㎡)、房间数、地段评分
# 标签:房价(万元)
# 特征矩阵 X:每行是一个房子,每列是一个特征
X = np.array([[120, 3, 8], # 房子1:120㎡,3室,地段8分
[80, 2, 6], # 房子2:80㎡,2室,地段6分
[150, 4, 9], # 房子3:150㎡,4室,地段9分
[90, 2, 7]]) # 房子4:90㎡,2室,地段7分
# 标签向量 y:对应的房价
y = np.array([300, 180, 450, 220]) # 单位:万元
print("房屋特征数据:")
print(X)
print("\n房价标签:")
print(y)
🔮 预测过程就是矩阵运算
当我们训练好模型后,预测新房子价格的过程就是:
预测价格 = 房子特征 × 模型参数
# 假设我们学到的模型参数
weights = np.array([2.0, 30, 15]) # 面积系数、房间系数、地段系数
# 预测新房子的价格
new_house = np.array([100, 2, 7]) # 100㎡,2室,地段7分
predicted_price = np.dot(new_house, weights) # 点积运算
print(f"新房子特征: {new_house}")
print(f"预测价格: {predicted_price}万元")
📝 本篇小结
- 向量:带方向的数字,表示大小+方向
- 矩阵:数字的表格,可以同时处理多组数据
- 矩阵乘法:机器学习的计算核心,一次性处理所有数据
- 实际应用:数据本身就是矩阵,模型运算就是矩阵运算
🎯 练习题
- 创建两个2×2的矩阵,手动计算它们的乘积,然后用Python验证
- 想想生活中还有哪些可以用向量表示的量?(提示:力、加速度、RGB颜色等)
下一篇预告:第3篇《概率论就是算可能性——猜硬币的故事》
我们将学习什么是 概率论,如何通过类似 “抛硬币”的方法,去趣味性地进行 概率论 的问题猜解!

127

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



