Your Site Title

矩阵重要概念与常用操作(工程视角)

面向 MongoDB / Pandas / 数据工程的矩阵速查表 核心思想:你每天写的都是矩阵变换,只是没这么叫

一、基础概念 1️⃣ 向量(Vector)

定义 向量是一组有序的数,用来表示一个对象的多个特征。

示例

x = [120, 3, 10] # 面积, 房间数, 楼龄

工程对应

MongoDB:一条 document

Pandas:DataFrame 的一行

2️⃣ 矩阵(Matrix)

定义 矩阵是多个向量组成的二维结构。

示例

X = [ [120, 3, 10], [ 90, 2, 5], [150, 4, 20] ]

工程对应

MongoDB collection

Pandas DataFrame

SQL 表

3️⃣ 维度(Shape) X ∈ R^(n × m) n = 行数(样本数) m = 列数(特征数)

工程中大量 bug 来自 shape 理解错误

二、最常用的矩阵操作 4️⃣ 行选择(Row Selection / Mask)

数学视角

X[mask]

MongoDB

db.col.find({ price: { $gt: 150 } })

Pandas

df[df[“price”] > 150]

含义: 👉 从矩阵中挑选满足条件的行(向量)

5️⃣ 列选择(Projection)

数学视角

X[:, [“price”, “days”]]

MongoDB

db.col.find( { vendor: “a” }, { price: 1, days: 1, _id: 0 } )

Pandas

df[[“price”, “days”]]

含义: 👉 裁剪特征维度,减少矩阵宽度

6️⃣ 矩阵扩维(Add Column)

数学视角

R^(n×m) → R^(n×(m+1))

Pandas

df[“score”] = df[“price”] / df[“days”]

含义: 👉 为每个向量增加一个新特征

7️⃣ 行级计算(Apply / For-loop)

数学视角

∀ xᵢ: yᵢ = f(xᵢ)

Pandas(慢)

df[“flag”] = df.apply( lambda r: r[“price”] > 100 and r[“days”] < 20, axis=1 )

说明:

每一行单独计算

本质是 Python for-loop

数据量一大必慢

8️⃣ 向量化计算(推荐)

数学视角

布尔向量运算

Pandas(快)

df[“flag”] = (df[“price”] > 100) & (df[“days”] < 20)

说明:

一次性对整列计算

底层是 C / NumPy

性能提升 10~100 倍

三、矩阵变换(真正的“计算”) 9️⃣ 矩阵乘法(Matrix Multiplication)

数学定义

Y = X · W

示例:房价预测

X = [ [120, 3, 10], [ 90, 2, 5] ]

W = [1000, 5000, -800]

price = X · W

含义:

X:房屋特征矩阵

W:权重向量

输出:预测价格

🔟 聚合 / 降维(Aggregation)

数学视角

R^(n×m) → R^(k×m)

MongoDB

{ $group: { _id: “$vendor”, avg_price: { $avg: “$price” } } }

Pandas

df.groupby(“vendor”)[“price”].mean()

含义:

多行 → 少行

汇总信息

降低数据规模

1️⃣1️⃣ 矩阵 Join(横向拼接)

数学视角

Z = X ⨝ Y

MongoDB

$lookup

Pandas

df1.merge(df2, on=”dhash”, how=”left”)

说明:

行数可能增加

列数一定增加

是最贵的矩阵操作之一

四、MongoDB + Pandas 的完整矩阵流程 实际代码 docs = db.col.find( {“days”: {“$gt”: 30}}, {“price”: 1, “days”: 1, “vendor”: 1} )

df = pd.DataFrame(docs) df[“score”] = df[“price”] / df[“days”] result = df.groupby(“vendor”)[“score”].mean()

矩阵视角 X₀ 原始矩阵 ↓ 行筛选 X₁ ↓ 列裁剪 X₂ ↓ 扩维 X₃ ↓ 降维 X₄

五、工程版矩阵三定律(非常重要)

能在 MongoDB 裁剪的,不要带到 Pandas

能向量化的,不要 apply

能早降维的,不要晚 group

🔹 例子 1:线性回归(预测房价) 1️⃣ 数据(向量)

房子特征向量:

x = [面积, 房间数, 楼龄]

2️⃣ 权重(矩阵 / 向量) w = [单价系数, 房间系数, 折旧系数]

3️⃣ 预测公式(矩阵运算) 价格 = w · x

👉 实际系统里:

所有房子的特征 = 矩阵 X

权重 = 向量 w

预测结果 = X · w

📌 机器学习、风控、推荐系统天天在用

🔹 例子 2:图像处理(非常直观) 图片本质是什么?

一张灰度图像:

矩阵 = [ [ 0, 30, 80], [120, 200, 255], [ 60, 100, 180] ]

每个数 = 像素亮度

整张图片 = 矩阵

模糊 / 锐化怎么做?

用一个小矩阵(卷积核)去“扫”图像:

模糊核 = [ [1, 1, 1], [1, 1, 1], [1, 1, 1] ]

👉 手机相机 / 美颜 / PS 全靠矩阵

🔹 例子 3:推荐系统(你刷到的内容) 用户向量 u = [喜欢体育, 喜欢科技, 喜欢音乐]

内容矩阵 I = [ [1, 0, 0], # 体育新闻 [0, 1, 0], # 科技新闻 [0, 0, 1] # 音乐视频 ]

推荐计算 得分 = I · u

👉 抖音 / B站 / Netflix 核心就是矩阵

🔹 例子 4:坐标变换(游戏 / 3D / 地图) 一个点(向量) p = [x, y]

旋转矩阵 R = [ [cosθ, -sinθ], [sinθ, cosθ] ]

旋转结果 p’ = R · p

👉 游戏引擎 / CAD / 自动驾驶

🔹 例子 5:数据库 & 批量计算(你熟悉的场景)

你在 Python / MongoDB / Pandas 里常做的事:

一堆数据

同样的规则

批量计算

这在数学上就是:

结果 = 矩阵 × 向量