当前位置: 首页 > news >正文

线性代数 + 编程:用Python实现向量和矩阵运算

从向量到矩阵,从随机数到AI数据库——数学是编程的隐形骨架。

👋 你好,我是 Evan,一名计算机专业的学长,也是《大一突围》专栏的作者。大一时我总觉得线性代数没用,矩阵乘法除了考试还能干嘛?后来学到机器学习、向量数据库,才发现线性代数就是AI的“普通话”。今天我就带你用Python亲手实现向量和矩阵运算,并聊聊它们如何连接随机数、AI和向量数据库。你会发现:数学从未如此有用。

欢迎来到《大一突围》专栏。

一、为什么线性代数对程序员越来越重要?

  • 你写的每一行import numpy as np,底层都是线性代数。

  • 你用的 ChatGPT、Stable Diffusion,核心计算全是矩阵乘法。

  • 你听说的“向量数据库”(如 Milvus、Pinecone),本质就是存储和检索高维向量,依赖向量相似度计算(余弦相似度、欧氏距离)。

结论:线性代数不是可选项,而是AI时代的必备内功。

二、向量:从几何意义到Python表示

2.1 什么是向量?

  • 几何视角:空间中的一个箭头,有方向有长度。

  • 代数视角:一组有序的数字列表,例如(3, 4)表示x=3, y=4。

2.2 向量的基本运算

2.3 Python代码示例:从零开始(纯列表)与numpy实现

# 纯Python实现向量加法 def vector_add(v, w): return [v_i + w_i for v_i, w_i in zip(v, w)] v = [1, 2, 3] w = [4, 5, 6] print(vector_add(v, w)) # [5, 7, 9] # 推荐使用 numpy(性能高,代码简洁) import numpy as np v = np.array([1, 2, 3]) w = np.array([4, 5, 6]) print(v + w) # [5 7 9] print(np.dot(v, w)) # 32 (1*4 + 2*5 + 3*6) print(np.linalg.norm(v)) # 3.741...

2.4 向量在AI中的应用:余弦相似度

两个向量的余弦相似度公式:

值越接近1,两个向量越相似。这正是向量数据库查找相似项的核心。

def cosine_similarity(v, w): return np.dot(v, w) / (np.linalg.norm(v) * np.linalg.norm(w)) v1 = np.array([1, 0, 0]) # 代表“猫” v2 = np.array([0.9, 0.1, 0]) # 相似向量 v3 = np.array([0, 0, 1]) # 代表“狗” print(cosine_similarity(v1, v2)) # 0.99 很相似 print(cosine_similarity(v1, v3)) # 0.0 完全不同

三、矩阵:批量处理向量的利器

3.1 什么是矩阵?

一个二维数组,可以看作一组行向量或列向量的集合。

3.2 矩阵的基本运算

3.3 Python代码示例

import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # 矩阵乘法 print(A @ B) # 输出: # [[19 22] # [43 50]] # 转置 print(A.T) # [[1 3] # [2 4]] # 单位矩阵 I = np.eye(2) print(I) # [[1. 0.] [0. 1.]]

3.4 矩阵在AI中的核心作用:神经网络的一层

一个全连接神经网络层:
输出 = 激活函数(输入 × 权重矩阵 + 偏置)
其中输入是向量,权重矩阵负责将输入映射到输出空间。成千上万个这样的矩阵乘法构成了深度学习。

# 模拟一个简单层:3维输入 -> 2维输出 input_vec = np.array([1.0, 2.0, 3.0]) # 假设一个样本 weight_matrix = np.random.randn(3, 2) # 3x2 权重矩阵 bias = np.array([0.1, -0.1]) output = input_vec @ weight_matrix + bias print(output) # 2维输出

四、向量数据库:线性代数落地的明星

4.1 为什么需要向量数据库?

  • 传统数据库按精确值查询(where name = '张三')。

  • AI应用需要语义搜索:输入“猫”,找出图像库中所有包含猫的图片。这需要将图片转化为向量,然后查找与“猫”向量最相似的项。

4.2 向量数据库的工作流程

4.3 用numpy模拟一个简单的向量数据库

import numpy as np # 假设我们有3个文档向量(5维) documents = np.array([ [0.9, 0.1, 0.0, 0.4, 0.2], [0.1, 0.8, 0.3, 0.1, 0.5], [0.2, 0.2, 0.9, 0.1, 0.1] ]) # 查询向量 query = np.array([0.85, 0.15, 0.05, 0.35, 0.25]) # 计算余弦相似度 def cos_sim(a, b): return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)) similarities = [cos_sim(query, doc) for doc in documents] # 找出最相似的文档索引 best_idx = np.argmax(similarities) print(f"最相似的文档索引: {best_idx}, 相似度: {similarities[best_idx]:.4f}")

这就是推荐系统、搜索引擎的底层原理。

五、数学无处不在:从Java的Random到线性同余生成器

5.1 伪随机数生成器的数学公式

你每天用的java.util.Random或 Python 的random.random(),其核心就是一个线性同余生成器(LCG)

  • X0X0​ 是种子

  • a,c,ma,c,m 是精心选择的常数

这不就是线性代数中的一次线性变换加上取模运算吗?

5.2 Python模拟Java的Random

class SimpleRandom: def __init__(self, seed=1): self.state = seed self.a = 1103515245 self.c = 12345 self.m = 2**31 def next_int(self): self.state = (self.a * self.state + self.c) % self.m return self.state def next_double(self): return self.next_int() / self.m rand = SimpleRandom(42) for _ in range(5): print(rand.next_double())

输出5个“随机”小数。虽然是确定的,但看起来随机。整个现代密码学、蒙特卡洛模拟都依赖这样的数学公式。

六、总结与资源推荐

  • 编程:善用numpy进行向量/矩阵运算,效率比纯Python高几十倍。

  • 数学:推荐阅读《线性代数及其应用》(Lay)、《程序员数学》(中村)。

  • AI方向:学习PyTorch/TensorFlow,它们本质就是自动求导的矩阵运算库。

  • 向量数据库:了解 Milvus、Faiss、Chroma 等工具。

📌Evan 说:线性代数不是枯燥的考试,它是你打开AI世界大门的钥匙。花一周时间把矩阵乘法、点积、范数搞透,后面的机器学习会顺畅很多。

❓ 问题:你在学习线性代数时有没有“这有什么用”的困惑?现在有没有某个应用让你突然理解了它的价值?或者你用过向量数据库吗?欢迎在评论区分享,我会选出 3 位同学,送出《线性代数+Python 实战练习册》和《向量数据库入门指南》。

📌如果本文帮你连接了数学与编程,请点 👍 赞 + 关注,本专栏《大一突围》持续输出编程与数学结合的硬核干货。

收藏本文,下次写AI代码时回看,理解每一行矩阵运算背后的意义。

http://www.jsqmd.com/news/909291/

相关文章:

  • PCL2启动器Forge安装失败:五层排查法彻底解决Java环境冲突
  • DeBERTa V2 XLarge模型架构详解:24层1536隐藏大小的设计奥秘
  • Bilibili缓存视频合并终极指南:告别碎片化,轻松导出完整MP4
  • 搞懂GNSS精密钟差:从IGS产品下载到BDS/DCB改正的完整避坑指南
  • OpenClaw 源码解析(十三):Plugins 插件系统与能力扩展机制
  • Windows热键冲突检测完全指南:Hotkey Detective实战解析
  • ChatGPT时代如何避免技术依赖:从Facebook历史看AI生态风险与架构策略
  • 猫抓浏览器扩展:3分钟掌握网页媒体资源下载终极指南
  • GPU混合精度FFTMatvec优化:性能与精度的平衡艺术
  • Python开发者三步接入Taotoken调用多款旗舰大模型
  • 越南语NLP突破:vi-mrc-large模型85.847% EM值背后的训练策略与数据集优化
  • 从PyWxDump项目移除看开源项目合规运营的7个关键教训
  • 基于AI与Python的Shopify商品信息自动化管道构建指南
  • 当Figma遇上中文:一个浏览器插件的设计语言本土化之旅
  • 对比直接使用官方API,Taotoken在模型选择与成本控制上的优势感知
  • 大模型落地瓶颈已显现:真正拉开差距的是「AI技能工程化」
  • 一文读懂FinBERT-FLS:如何3行代码实现金融文本FLS自动识别
  • 电子民主实践指南:从技术架构到应用场景的深度解析
  • 终极提示词工程:解锁Llama3-ChatQA-1.5-8B文档问答能力的5个专业技巧
  • MiMo-VL-7B-SFT核心技术解析:原生分辨率ViT编码器与跨模态对齐
  • 从零开始微调wuhaicc/xlnet_base_cased:自定义数据集的完整流程
  • HarmonyOS RandomUtil 随机数生成全攻略:整数、浮点数、布尔值一次搞定
  • # 2026年广东童装批发/品牌童装尾货生产厂家实力排行榜:广州货源优质,基于童装供应链的5大权威推荐榜单 - 十大品牌榜
  • OpenClaw 源码解析(十四):Provider 系统与模型能力接入机制
  • Nemotron-3-Nano-Omni-30B-A3B-Reasoning-FP8视频处理深度解析:帧采样与内存优化策略
  • Vue3低代码平台实战:如何用可视化拖拽快速构建H5移动端应用
  • WinBtrfs终极指南:Windows原生读写Linux Btrfs文件系统的完整解决方案
  • DeepSeek-R1-Distill-Llama-8B容器化部署实战:Docker与MindIE镜像最佳实践
  • 从‘整蛊脚本’到安全测试:在虚拟机里安全玩转那些危险的Windows命令
  • 终极DroidCam OBS插件指南:3分钟将手机摄像头变为专业直播设备