Ran Wei/数学系列
English
计算机科学与人工智能的数学基础 — Ran Wei

向量、几何与数组记法

计算坐标向量,说明长度与角度,选择有意义特征尺度,把 NumPy 形状纳入数学规格。

8 小时4 个时段3 个实验12 道练习与 2 道拓展10 道自测题

完成后你能够

  • 区分点、位移、坐标元组与存储数组。
  • 计算并解释线性组合与仿射组合。
  • 从点积推导柯西–施瓦茨与欧几里得三角不等式。
  • 比较范数、单位方向、余弦相似度与特征尺度。
  • 预测平坦、行、列形状并修复意外广播。

开始之前

模块 01 与 03:实数、函数、索引和与笛卡尔积。实验前完成 NumPy 数组准备,不假设已学线性代数。

目录

学习计划

8 小时

时间包含练习,是估计值;可按需要拆分时段。可选拓展练习额外需要 35 分钟。进度保存在当前浏览器,中英文版本共享。

1

先选择坐标,数字才有几何含义

数据记录可写数字列表,点积或距离看似直接,却依赖特征顺序、单位、运算。厘米变米,即使物理记录不变,也可改变未加权最近邻。列数组与平坦数组混用可产生全部两两差,而非预期配对差。

本模块一起发展数学与实现约定,区分点与位移,推导长度与角度界,比较范数,计算前查形状。数值调用成功说明可执行,数学解释仍需坐标代表什么的假设。

回忆检查:实数元组、有限和、笛卡尔积。按需复习模块 01、模块 03,不假设已有线性代数。实验前完成 NumPy 数组准备,需要时约三十分钟额外准备。数值基线为其中说明的 Python 3.11 与固定 NumPy 环境。

2

标量、坐标向量、点与位移

标量是缩放向量的单数值,这里为实数。Rd\mathbb R^d 中的坐标向量是 d 个实数的有序元组,正整数 d 为坐标数。模块 03 的笛卡尔积构造给所有这些元组集合。顺序属于规格,(身高,年龄) 与 (年龄,身高) 特征约定不同,即使数组都长二。

几何向量可描述与画在何处无关的位移,箭头记录大小与方向。平移箭头、不旋转拉伸,保持位移。数据元组则可收集不同单位特征,写成向量允许坐标代数,不自动赋欧几里得长度物理意义。

点是位置,位移连接位置。选定坐标系中,q−p 是从 p 到 q 的位移。原点平移使两点坐标同加偏移,差不变。位置与位移可能用相同元组记法,因此上下文要明确加或比的对象。

例题详解
位移独立于原点

p=(1,2),q=(4,6),q−p=(3,4)。改坐标原点使两点显示同加 (10,−5),p′=(11,−3),q′=(14,1),差仍 (3,4)。从 (0,0) 到 (3,4) 的箭头代表同位移,但不是原点 q。下面发展的欧几里得长度为五。

点与位移的平移原点 p 一二、q 四六,差三四;新 p 十一负三、q 十四一,差仍三四。同加偏移后,点坐标变而位移不变p = (1,2)q = (4,6)(3,4)p′ = (11,−3)q′ = (14,1)(3,4)新坐标同加 (10,−5);差仍 (3,4)。
图 9.1

点间箭头及平移副本坐标差相同,单点坐标随坐标系改变。

零向量全零,描述无位移,是长度零的有效向量,不是缺失观测。未知年龄需另设缺失表示,填零会断言数值并改几何。类别编码 1,2,3 也不因数字形式而有有意义距离,编码决定比较意义。

坐标单位向量 eᵢ 在第 i 项一,其他零。x=∑i=1dxieix=\sum_{i=1}^d x_i e_i 表每坐标沿自己轴贡献。二维 (3,4)=3(1,0)+4(0,1),这些方向单位长且在普通点积下互相垂直。模块 11 再发展一般基、维数与坐标变化。

加比向量需相同维数与对应含义,不能三特征与两特征配对时默删一项。长度相同也不保证顺序同。实验在 zip 前查长度,因为 Python zip 默认到较短者结束,可隐藏模型错。

数学维数 d 不同存储轴。三坐标向量可存一轴 (3,) 或两轴 (3,1),一百个这样的向量表 (100,3) 每观测仍三坐标。分开观测数、特征数与容器轴数,可防混淆。

检验理解

从 (−1,3) 到 (2,−1) 的位移?零向量等于缺失吗?(100,3) 每行是百维吗?

查看答案

位移 (3,−4)。零向量是已知零,缺失不同。每行三坐标,一百为观测数,数组两轴。

3

加法、缩放、线性与仿射组合

向量加法、标量乘逐坐标:(u+v)i=ui+vi(u+v)_i=u_i+v_i,(αu)i=αui(\alpha u)_i=\alpha u_i,结果同维。位移箭头相加把第二尾放第一头,总位移从起点到终点。负缩放反方向、正保方向、零缩放成零。

实数逐坐标运算给加法交换结合、零单位、−u 加逆、缩放分配。例如 α(u+v)=αu+αv 因每坐标成立。因此有限向量和在实数模型可重排分组。浮点不同分组可能改小舍入误差,模块 28 另讲。

线性组合 ∑j=1kαjvj\sum_{j=1}^k\alpha_jv_j 使用实系数与同维向量,系数不必正或和一。2(3,4)+3(4,−3)=(18,−1) 合法,坐标可超原端点。它是代数构造,不必是插值或概率加权平均。

过点 p、非零方向 u 的直线为 p+tu,t 实数;t∈[0,1] 给 p 到 p+u 线段,其他延长。u=0 时只有 p,称完整直线误导。仿射直线有偏移 p,而 tu 直线过选定原点。

点的仿射组合系数和一,两点为 (1−t)p+tq。0≤t≤1 在线段插值,范围外外推。两点同加 b 后组合恰加 b,因为和一。和非一会缩放平移,使点的结果错误依赖坐标原点。

例题详解
插值保点解释

p=(1,2),q=(4,6),t=3/4,(1/4)p+(3/4)q=(3.25,5),位于 p 到 q 的四分之三处。从 p 位移 (3/4)(q−p)=(2.25,3)。t=2 得 (7,10),在 q 外同一直线上。系数仍和一,但一项负,是仿射外推而非凸插值。

凸组合为非负系数的仿射组合。系数条件是代数条件,是否真实概率要另模型。连续特征混合可能有意义,但类别编码或受限对象不一定;两个有效记录混合不必对应物理有效或实际存在个人。

特征操作要保单位,米位移倍增仍米,米加米有意义。把秒与米坐标和当一个物理长度没有自动解释。可有意选加权数值学习几何,但记录选择与尺度,代数相容和应用意义都要。

重排要一致应用所有比较对象,同一坐标排列保点积与下面标准范数,仅排一者则混特征、改结果。这区分表示改变与关系改变,形状检查无法识别顺序错。

例如 (身高,年龄)=(170,20),另一存 (年龄,身高)=(30,180),长度匹配但首项配对会把身高乘年龄。把第二改 (180,30) 修复对应,选尺度仍另任务。可靠数据接口在形状外记录名称与单位。

检验理解

2p+3q 是仿射点组合吗?p+tu 何时真直线?(1−t)p+tq 为何正确响应原点改变?

查看答案

系数和五非仿射,真直线需 u≠0。仿射和一,同加 b 使组合恰加 b。

4

点积、正交、角度与柯西–施瓦茨

普通实点积 u⋅v=∑i=1duiviu\cdot v=\sum_{i=1}^d u_iv_i 为标量,逐项乘保向量则不同。点积对称、每参数线性:u·(αv+βw)=α(u·v)+β(u·w)。自积为平方和,非负,且恰全坐标零时零。欧几里得长度 ∥u∥2=u⋅u\|u\|_2=\sqrt{u\cdot u}。

u·v=0 称正交,非零普通几何表示垂直。零向量代数上与所有正交,但无方向或普通角度。因此点积谓词与几何角度域不同。平面 (3,4),(4,−3) 点积十二减十二为零。

先介绍角度:锐角直角三角形余弦为邻边除斜边,扩为有符号方向对齐,同方向一、直角零、反方向负一。非零向量夹角零到 180 度,等价零到 π 弧度,π 弧度是半圈。反余弦为 [−1,1] 对齐值选该范围角度。

两非零向量有 u⋅v=∥u∥2∥v∥2cos⁡θu\cdot v=\|u\|_2\|v\|_2\cos\theta。平面选单位 û=u/||u||₂ 与垂直 (−u₂,u₁)/||u||₂,v 沿 û 的有符号分量 v·û,除 ||v||₂ 按直角几何给余弦,再乘回得公式。并不声称任意无关特征元组已有有用物理夹角。

例题详解
单位轴分量与垂直余量

w=(2,3),e₁=(1,0),w·e₁=2,沿轴分量 2e₁=(2,0),余 (0,3) 正交 e₁。u=(3,4),v=(4,−3),长均五、点积零,夹角九十度。一般子空间投影模块 12,本例仅需坐标单位方向。

分量与正交余量二三向量沿第一轴投影二零,余量零三垂直,点积选择分量二。沿第一单位轴分量为二w = (2,3)2e₁ = (2,0)(0,3)0w·e₁ = 2(0,3)·e₁ = 0
图 9.2

坐标分量与垂直余量形成直角三角形,点积选单位方向的有符号分量。

柯西–施瓦茨不等式 ∣u⋅v∣≤∥u∥2∥v∥2|u\cdot v|\leq\|u\|_2\|v\|_2。形成余弦前先证明:v=0 两边零;否则取 t=(u·v)/(v·v),展开非负 ||u−tv||₂² 得 ||u||₂²−(u·v)²/||v||₂²≥0,乘正分母、取非负根得结论。

两者非零时等号当且仅当 u−tv=0,即标量倍。正倍余弦一,负倍负一。一者零也满足不等式等号,却仍未定义余弦。不能因不等式包含零就用零自积作分母。

此不等式保证非零余弦商在 [−1,1]。浮点舍入可能略越界,角度显示可在非零、形状检查后把商夹回范围。这是局部数值显示政策,不是新数学不等式。大幅度或下溢需更多处理,超本小坐标实验。

点积依选定几何,某特征缩放改积与角度。加权内积可建另一几何,但要声明假设。AI 注意力与许多相似计算用学习坐标点积,应用含义依构造坐标方式,不只因对应项可相乘。

检验理解

证 (3,4) 与 (4,−3) 点积零。余弦何时定义,什么不等式给界?

查看答案

3·4+4·(−3)=0。两向量都非零方可除两长度。柯西–施瓦茨保证商在负一到一,零仍满足不等式但商无定义。

5

范数、度量与特征单位效应

范数赋非负长度,恰零向量时零,||αu||=|α| ||u||,以及三角不等式 ||u+v||≤||u||+||v||。只有非负不够,候选长度需所有律,使缩放、抵消、路径长度一致。欧几里得只是多种坐标范数之一。

曼哈顿范数 ∥u∥1=∑i∣ui∣\|u\|_1=\sum_i|u_i|,最大范数 ∥u∥∞=max⁡i∣ui∣\|u\|_\infty=\max_i|u_i|。正性与缩放由绝对值;曼哈顿逐项 |uᵢ+vᵢ|≤|uᵢ|+|vᵢ| 再和。最大范数中每坐标和绝对值≤||u||∞+||v||∞,取最大即三角律。

欧几里得展开 ||u+v||₂²=||u||₂²+2u·v+||v||₂²,柯西–施瓦茨界中项,结果≤(||u||₂+||v||₂)²。非负取根证明三角律,这是点积定理连接范数公理,不凭普通图假设所有维数。

平方欧几里得长度用于目标,却自身不是范数:α 缩放给 α² 而非 |α|。u=v=(1,0),和平方长四,大于各平方一加一,三角失败。“平方范数”描述构造,不把范数律全转给新函数。

非负距离平方保排序,最近邻只需次序可省根。但数值与度量性质改了:实线零到二平方距四,大于零到一及一到二平方距和二。排序捷径不等于可把新函数代入需要三角律的度量证明。

例题详解
同位移有多种合法长度

u=(3,4),曼哈顿七、欧几里得五、最大四。p=(1,2) 到 q=(4,6) 欧距五;限制水平垂直移动最短坐标路程七,另模型;最大范数测最大单坐标改变。每种回答不同问题,不是修正另两种。

三种范数的单位球最大范数单位边界是正方形,欧几里得圆,曼哈顿菱形,均过坐标单位轴端点。二维单位球:每个边界都表示相应长度一01−1曼哈顿:菱形欧几里得:圆最大:方形
图 9.3

二维单位球依曼哈顿、欧几里得、最大范数分别菱形、圆、正方形,各方向显示半径不同。

度量 d(p,q) 非负、恰 p=q 时零、对称且 d(p,r)≤d(p,q)+d(q,r)。范数诱导 d(p,q)=||q−p||,正性给前两,−1 齐次给对称,(q−p)+(r−q) 三角给度量三角。此时对象是点间距,不是单个位移长。

查询 (0,0),P=(1,100),Q=(3,0),坐标小时、厘米。未加权欧距约 100.005 与三,选 Q。厘米转米后 P=(1,1) 距 √2,Q 仍三,选 P。物理测量未变,固定数值权重使几何改变。

正尺度 s 定义 dₛ(p,q)=sqrt(∑ᵢsᵢ²(qᵢ−pᵢ)²),先可逆坐标缩放再欧距,所以为度量。转换单位欲保原度量,要尺度反向调整。若某尺度零,不同点只在该坐标差也可距零,违反同一性条件。

固定有限 d,标准范数满足 ||u||∞≤||u||₂≤||u||₁≤√d ||u||₂。前界比最大平方、平方和、绝对项和平方;最后柯西–施瓦茨用于绝对项向量与全一。它们比长度,不保证相同邻居排序,常数依维数。

选范数与尺度要模型理由,网格局部路程、记录长度、最大分量误差可偏不同量。数值意义相对选择与特征。统计预处理后讲训练集学习尺度,本课用明确单位转换,不需要未学统计。

检验理解

算 (−3,4) 三范数。厘米转米为何改未加权邻居?某尺度零会怎样?

查看答案

七、五、四。固定权使转换后贡献不同,保原度量需一致改权。零尺度可让不同点距零,违反度量条件。

6

单位方向、归一化与余弦相似度

非零 u 的归一化 û=u/||u||₂。齐次给长一,分母正所以保方向。(3,4) 为 (0.6,0.8)。不是除坐标和,负项抵消会使项和不适合一般长度。

零向量长零无方向,不能按式归一。应用须声明拒绝、未定义分数或另有依据的约定。默加小数分母改变函数,应解释政策,不能当原几何定义。

非零两者余弦相似度 cosim⁡(u,v)=(u⋅v)/(∥u∥2∥v∥2)=u^⋅v^\operatorname{cosim}(u,v)=(u\cdot v)/(\|u\|_2\|v\|_2)=\hat u\cdot\hat v。忽略正幅度变化,α>0 替 αu 分数不变;负缩放反向改符号。一表示正平行,不表示原坐标、长度同。

例题详解
对齐不是概率或相等测试

(1,0),(100,0) 余弦一而欧距九十九;(1,0),(−1,0) 余弦负一,不可为普通概率。非零正交余弦零,不表示缺失或统计独立。它是所选坐标几何分数,不是校准标签信心。

单位 u,v 有 ||u−v||₂²=2−2u·v=2−2cosim。因此单位查询与单位候选中,最大余弦与最小欧距同排序含平局。推导需两者单位长,原始幅度变化另加项,排序不必相同。

归一可能丢重要幅度,如活动量或物理位移长度。只关方向时可以合适,关键是何种变化应算相似。余弦或欧距都非每嵌入、测量系统普遍正确选择。

交互演示

拖端点或用坐标输入与方向键,比较点积、长度、角度并试零。上面非零正交例无需脚本。

检验理解

归一 (3,4),非零 u 与 −u 余弦?何时余弦与欧距排序一致?

查看答案

(0.6,0.8),反向非零余弦 −1。查询和候选都单位向量时一致,任意原始长度不保证。

7

数组形状、广播与明确实现约定

NumPy 数组有形状元组、轴数、dtype。数学坐标要存储约定:独立向量平坦 (d,),需方向时行 (1,d)、列 (d,1),B 观测 d 特征表 (B,d)。模块 10 讲矩阵积,现在标特征轴已防许多错。

相容平坦 u*v 给 d 个逐项积,u @ v 给标量点积。(B,d) 表乘 (d,) 尺度通过广播每行应用特征权;np.linalg.norm(table, axis=1) 给 B 行长,漏轴可把全表塌成一个量。轴选择属于数学问题。

广播从右比长度,相同相容,一可扩,缺领先轴作一,因此 (3,1) 与 (3,) 产生 (3,3),合法但每列项配每平坦项。成功不能判断这些两两组合是否目标,应运行前指定正确输出形状。

例题详解
错误广播改变比较数量

预测 [1,2,3] 形状 (3,),观测 [1,2,4] 形状 (3,1),直接差行 [0,1,2],[−1,0,1],[−3,−2,−1]。九平方均值 21/9=7/3,配对差应列 (3,1) [0,0,−1],三平方均值 1/3。修复使两者列,改变数学配对而不只是显示。

广播改变配对问题平坦一二三与列一二四相减生成九差,列配对只有零零负一,均方分别为三分之七与三分之一。预测 (3,) − 观测 (3,1):全部两两差错误广播 (3,3)修复配对 (3,1)0120-1010-3-2-1-1九平方均值 7/3三平方均值 1/3
图 9.4

目标方向不匹配,广播成全部配对差网格;同列保每观测一个比较。

平坦 (d,) 转置仍一轴,不成列。用 v[:,None] 或核对项数的reshape;改 (d,1) 不改值却改操作约定。平坦化任意表可丢观测与特征轴区别,只有数学对象真是一个序列时才用。

多轴数组用于图像、批次、时间序列、AI。(B,T,d) 可能批、时间、特征,其他应用可别义,形状本身不命名。声明轴顺序、约简、允许广播,逐操作边界查输出。之后张量与自动微分基于此约定。

数值检查要结构与值一起。np.allclose 前查预期同形状,比较也能广播。容差按小浮点量选择,近似不是精确证明。循环与 NumPy 对小坐标相对绝对 10⁻¹²,代数证明独立于有限一致建立一般公式。

检验理解

预测 (4,2)*(2,) 与 (3,1)-(3,)。为何 v.T 不足列,近似比较前查形状?

查看答案

前 (4,2) 逐特征乘,后 (3,3) 可能错配。平坦转置仍 (d,),近似比较也广播,可掩结构错,先断言形状。

8

常见误解与失败情形

说法 失败原因 修复
数字元组自动有物理距 单位、编码可能不相容 声明几何与单位
点与位移可互换 原点变动影响点坐标 正确用差与仿射组合
点积为逐项乘 点积和成标量 查运算符与输出
零有余弦方向 长零 声明未定义处理
余弦一等于向量同或确定 正倍同对齐,分数可负 解释实际定义
范数不改邻居 单位球与尺度改比较 选并说明度量
平坦转置变列 仍一轴 明确添轴
无异常即正确配对 广播可算另问题 声明输入、轴、输出
9

三个 CPU 实验

先完成 NumPy 准备,安装固定数值依赖。小 CPU 数组无外部数据,先预测并解释捕获输出,下载文件是执行源。

实验 A 循环计算与 NumPy 核对

预测:正交点积、三范数、位移长、(3,4) 单位方向。运行:比循环与 NumPy。解释:单位坐标轴分量和 zip 前长度检查。修改:换负坐标,保持维数,预测不变范数。数值容差与一般证明是不同证据。

下载 lab1_vectors.py

"""Loop-based vector calculations checked against NumPy on small real coordinates."""
from math import sqrt
import numpy as np

def dot(u, v):
    if len(u) != len(v):
        raise ValueError("Coordinate lengths must agree")
    return sum(a * b for a, b in zip(u, v))

def norm(u, kind):
    if kind == 1:
        return sum(abs(x) for x in u)
    if kind == 2:
        return sqrt(dot(u, u))
    if kind == "inf":
        return max((abs(x) for x in u), default=0)
    raise ValueError("This lab supports norms 1, 2, inf")

u, v = (3, 4), (4, -3)
print("u, v:", u, v)
print("Loop / NumPy dot:", dot(u, v), float(np.array(u) @ np.array(v)))
for kind in (1, 2, "inf"):
    reference = np.linalg.norm(np.array(u, dtype=float), ord=np.inf if kind == "inf" else kind)
    assert np.isclose(norm(u, kind), reference, rtol=1e-12, atol=1e-12)
    print("Norm", kind, ":", norm(u, kind), "; NumPy:", float(reference))
p, q = (1, 2), (4, 6)
displacement = tuple(b - a for a, b in zip(p, q))
print("Displacement q-p / Euclidean distance:", displacement, norm(displacement, 2))
unit = tuple(x / norm(u, 2) for x in u)
assert np.isclose(norm(unit, 2), 1, rtol=1e-12, atol=1e-12)
print("Unit direction of u:", unit)
direction = (1, 0)
projection = tuple(dot((2, 3), direction) * x for x in direction)
print("Component of (2,3) along the first unit axis:", projection)
try:
    dot([1, 2], [3])
except ValueError as error:
    print("Rejected:", error)
print("Tolerances compare numerical values; the length check prevents silent zip truncation.")
输出
u, v: (3, 4) (4, -3)
Loop / NumPy dot: 0 0.0
Norm 1 : 7 ; NumPy: 7.0
Norm 2 : 5.0 ; NumPy: 5.0
Norm inf : 4 ; NumPy: 4.0
Displacement q-p / Euclidean distance: (3, 4) 5.0
Unit direction of u: (0.6, 0.8)
Component of (2,3) along the first unit axis: (2, 0)
Rejected: Coordinate lengths must agree
Tolerances compare numerical values; the length check prevents silent zip truncation.

实验 B 单位与邻居排序

预测:厘米转米前后谁最近。运行:读欧与曼哈顿序。解释:改几何与缩放曼哈顿稳定平局顺序。修改:逆转换调权,查原距恢复。稳定排序让平局复现,不让相同距离数学不同。

下载 lab2_feature_units.py

"""Neighbour rankings under an explicitly changed coordinate scale."""
import numpy as np

labels = np.array(["P", "Q", "R"])
# Feature 1 measured in hours; feature 2 measured in centimetres.
query = np.array([0.0, 0.0])
candidates = np.array([[1.0, 100.0], [3.0, 0.0], [0.0, 200.0]])

for name, scale in [("hours + centimetres, unweighted", np.array([1.0, 1.0])),
                    ("hours + metres, unweighted", np.array([1.0, 0.01]))]:
    differences = (candidates - query) * scale
    distances = np.linalg.norm(differences, axis=1)
    order = np.argsort(distances, kind="stable")
    print(name)
    print("Euclidean distances:", [round(float(d), 6) for d in distances])
    print("Rank order:", labels[order].tolist())
    l1 = np.abs(differences).sum(axis=1)
    print("Manhattan distances:", l1.tolist(), "; stable tie order:", labels[np.argsort(l1, kind="stable")].tolist())
assert labels[np.argmin(np.linalg.norm(candidates - query, axis=1))] == "Q"
assert labels[np.argmin(np.linalg.norm((candidates - query) * [1, 0.01], axis=1))] == "P"
print("Changing units while leaving numeric weights fixed changes the metric and can change neighbours.")
print("To preserve a chosen metric after conversion, transform its weights consistently.")
输出
hours + centimetres, unweighted
Euclidean distances: [100.005, 3.0, 200.0]
Rank order: ['Q', 'P', 'R']
Manhattan distances: [101.0, 3.0, 200.0] ; stable tie order: ['Q', 'P', 'R']
hours + metres, unweighted
Euclidean distances: [1.414214, 3.0, 2.0]
Rank order: ['P', 'R', 'Q']
Manhattan distances: [2.0, 3.0, 2.0] ; stable tie order: ['P', 'R', 'Q']
Changing units while leaving numeric weights fixed changes the metric and can change neighbours.
To preserve a chosen metric after conversion, transform its weights consistently.

实验 C 错配与未定义余弦

预测:错误 (3,3) 差网格、修复 (3,1) 差与零结果。运行:比两均方差和拒绝例。解释:未检查零除为 nan,守卫报未定义。修改:非零单位向量验距平方=2−2cosim。代码限小有限坐标,极端浮点幅度需更多处理。

下载 lab3_shape_and_cosine_faults.py

"""Repair a successful wrong broadcast and define the zero-vector policy explicitly."""
import numpy as np

predicted = np.array([1.0, 2.0, 3.0])
observed = np.array([[1.0], [2.0], [4.0]])
wrong = predicted - observed
paired = predicted[:, None] - observed
assert wrong.shape == (3, 3) and paired.shape == (3, 1)
print("Wrong broadcast shape / mean squared difference:", wrong.shape, round(float(np.mean(wrong**2)), 6))
print("Paired shape / mean squared difference:", paired.shape, round(float(np.mean(paired**2)), 6))
assert np.isclose(np.mean(paired**2), 1 / 3, rtol=1e-12, atol=1e-12)

def cosine(u, v):
    u, v = np.asarray(u, dtype=float), np.asarray(v, dtype=float)
    if u.ndim != 1 or v.ndim != 1 or u.shape != v.shape:
        raise ValueError("Require matching flat vector shapes")
    length_u, length_v = np.linalg.norm(u), np.linalg.norm(v)
    if length_u == 0 or length_v == 0:
        raise ValueError("Cosine is undefined for a zero vector")
    return float((u @ v) / (length_u * length_v))

zero, other = np.array([0.0, 0.0]), np.array([1.0, 2.0])
with np.errstate(invalid="ignore", divide="ignore"):
    bad = (zero @ other) / (np.linalg.norm(zero) * np.linalg.norm(other))
print("Unchecked zero-vector cosine:", float(bad))
assert np.isnan(bad)
for u, v in [([3, 4], [4, -3]), ([1, 0], [-1, 0]), ([0, 0], [1, 2]), ([1, 2], [1])]:
    try:
        print("Cosine:", u, v, "=", cosine(u, v))
    except ValueError as error:
        print("Rejected:", u, v, str(error))
print("Scope: small finite coordinates. Extreme floating magnitudes need further numerical handling.")
输出
Wrong broadcast shape / mean squared difference: (3, 3) 2.333333
Paired shape / mean squared difference: (3, 1) 0.333333
Unchecked zero-vector cosine: nan
Cosine: [3, 4] [4, -3] = 0.0
Cosine: [1, 0] [-1, 0] = -1.0
Rejected: [0, 0] [1, 2] Cosine is undefined for a zero vector
Rejected: [1, 2] [1] Require matching flat vector shapes
Scope: small finite coordinates. Extreme floating magnitudes need further numerical handling.
10

练习与完整解答

1–12 必做,13–14 扩展。数据解释时标特征含义与数组形状。

练习 1★★★计算5 分钟

u=(3,4),v=(4,−3),算 u+v,2u−v,−u。

查看解答

(7,1),(2,11),(−3,−4),均两坐标,负缩放反位移方向。

练习 2★★★计算5 分钟

p=(1,2),q=(4,6),算四分之一 p 加四分之三 q,判仿射与凸。

查看解答

(3.25,5),系数和一故仿射,非负故凸,在段内,从 p 位移 (2.25,3)。

练习 3★★★计算5 分钟

p=(−1,3),q=(2,−1),求差,再同加 (10,5) 重算。

查看解答

(3,−4),新点 (9,8),(12,4) 差相同。位置改变,共平移在位移中抵消。

练习 4★★★概念5 分钟

解释 2p+3q 为何非原点无关仿射点构造;u=0 的 p+tu 是线吗?

查看解答

同偏移 b 使结果加 5b 非 b,系数和五不保仿射点规则。u=0 始终 p,是一点非线。

练习 5★★★proof14 分钟

证同维实向量 u·(αv+βw)=α(u·v)+β(u·w),及 u·u=0 蕴涵 u=0。

查看解答

展开有限和 ∑uᵢ(αvᵢ+βwᵢ),逐项分配再拆和。自积 ∑uᵢ²,各非负,和零强迫每项零,每坐标零。使用同维与实坐标。

练习 6★★★proof14 分钟

用 ||u−tv||₂² 证柯西–施瓦茨,含 v=0 与两非零等号条件。

查看解答

v=0 两边零;否则 t=(u·v)/||v||₂²,展开 0≤||u||₂²−(u·v)²/||v||₂²,乘正分母取非负根得界。非零等号要求平方长度零,即 u=tv,标量倍也直接给等号。

练习 7★★★proof14 分钟

从柯西–施瓦茨推欧范数三角,再说明 d(p,q)=||q−p||₂ 对称与度量三角。

查看解答

展开和平方,以 2||u||₂||v||₂ 界中项,≤两长和平方,取非负根。||−x||₂=||x||₂ 给对称,r−p=(q−p)+(r−q) 给三角。非负及零只在同点完成其他度量条件。

练习 8★★★application10 分钟

查询零,P=(1,100),Q=(3,0),比较第二坐标乘 0.01 前后欧邻居,怎样保原度量?

查看解答

原 √10001≈100.005 与三选 Q;新 P 距 √2、Q 三选 P。保原数值度量需新第二坐标在范数内乘一百,逆单位转换。选择未加权米则有意改几何。

练习 9★★★application10 分钟

(4,2) 四条两特征记录,(2,) 尺度乘与 axis=1 行范数形状?为何 ndim 非特征维?

查看解答

乘广播 (4,2),每尺度供一特征列。行范数约特征轴得 (4,)。ndim 二指观测、特征两轴,记录两坐标,这里数量偶合而含义不同,(4,3) 显示差别。

练习 10★★★application10 分钟

单位 u,v 证距平方=2−2cosim,解释排序同与为何余弦一不测原向量相等。

查看解答

展开两自积减二点积,单位长给 2−2u·v,点积即余弦,故单位候选最小距等最大余弦。原 (1,0),(100,0) 同余弦一却幅度大不同,相等需同坐标。

练习 11★★★diagnosis10 分钟

预测 (3,) 与观测 (3,1) 未reshape相减,结果形状?解释 [1,2,3]、[1,2,4] 两均方差。

查看解答

从右广播 (3,3),行 [0,1,2],[−1,0,1],[−3,−2,−1],平方和二十一、九项均 7/3。配对 [0,0,−1] 三项均 1/3。都列或都平坦,再先查输出形状。

练习 12★★★diagnosis10 分钟

函数归一每向量、称余弦概率、把平坦转置当列。具体诊断三项。

查看解答

零长零不能除,要未定义政策。反向余弦负一反驳概率,正值也不自动校准。平坦 (d,) 转置仍 (d,),需新轴成 (d,1)。

练习 13★★★proof15 分钟

扩展:证 ||u||∞≤||u||₂≤||u||₁≤√d ||u||₂,说明不保证同最近邻排序。

查看解答

最大平方≤平方和给首,绝对项和平方等平方和加非负交叉项给二,绝对项向量与 d 个一的柯西–施瓦茨给末。界不保全部序:零源 (3,0),(2,2) 曼哈顿三、四,欧三、√8,次序反。

练习 14★★★application20 分钟

扩展:s=(1,0) 的 dₛ(p,q)=||s*(q−p)||₂ 哪里非度量?正尺度为何避免?

查看解答

p=(0,0),q=(0,5) 不同,缩放差零、距零,同一性失败。每尺度正时对角缩放单射,缩放差零强迫原差零,欧正性、对称、三角传递,成为真度量。

11

自测测验

1–9 自动,10 书面自评。

1
两点同加偏移,什么不变?
2
凸组合系数条件?
3
(3,4)·(4,−3)?
4
(3,4) 的 1,2,∞ 范数依次?
5
普通余弦商何时定义?
6
余弦一建立什么?
7
某特征单位变对未加权距离可怎样?
8
(3,1)+(3,) 广播形状?
9
np.allclose 前为何查形状?
查看答案

原零源 P=(1,100),Q=(3,0) 未加权选 Q,第二乘 0.01 后 P 距 √2,Q 三选 P,数值几何改变。保原度量需特征权逆调整。(3,) 预测减 (3,1) 观测给 (3,3) 两两比较,而非三对。都列或都平坦并查输出。算术可能正确回答错误问题,需说明单位、轴与目标比较。

12

带着问题阅读

用作者 Mathematics for Machine Learning 伴随站的解析几何选段比较点积、长度、投影。查 NumPy 数组指南与广播规则。本课证明例子原创,数值检查不替代一般论证。

时间 选段与问题
学习时段 1 · 20 分钟 坐标向量与几何:哪些点、哪些位移?
学习时段 4 · 20 分钟 NumPy 形状与广播:右对齐长度怎样确定输出轴?

区分坐标几何与 ndim 编程术语,同词可指不同数量。

13

回忆、结业任务与下一步

不看笔记算组合,证柯西–施瓦茨、欧三角,解释零例外。给改变度量的单位变换和无异常错误形状。

结业任务:u=(−3,4),v=(3,4),点积七、长均五、余弦 7/25,单位方向 (−0.6,0.8),(0.6,0.8)。两行表 (2,2),行范数 (2,);三行两特征表每行仍两坐标,非三坐标。

前进标准:应用前声明坐标与形状。下一线代课把矩阵当映射、解线性系统,见课程总览。

14

记法与双语术语

术语或符号 含义 English
标量、向量、点 缩放数、位移或元组、位置 Scalar / vector / point
线性、仿射、凸组合 任意系数、和一、另非负 Linear / affine / convex combination
u·v / 正交 坐标积和、零点积 Dot product / orthogonal
柯西–施瓦茨 两长度界点积 Cauchy–Schwarz
范数、度量 满足律的向量长、点距 Norm / metric
单位方向、余弦相似度 非零归一向量、方向对齐 Unit direction / cosine similarity
形状、轴、广播 存储长度、坐标索引维、相容扩展 Shape / axis / broadcasting
特征尺度、配对 声明几何权、对应记录比较 Feature scale / pairing