用代码读懂线性代数:从经典教材到矩阵运算实战
简介《线性代数及其应用》第五版英文原版电子书由David C. Lay等编著面向人工智能、数据科学及理工科学生也适合正在打数学基础的编程学习者。书中系统讲解矩阵运算、向量空间、线性变换、特征值与奇异值分解等内容并配有大量应用实例帮助读者建立从理论到算法实现的完整桥梁。全书章节从线性方程组与矩阵入手逐步深入到向量空间、正交性与最小二乘法、行列式、特征值及数值线性代数等主题每章末尾均配有习题与复习题便于自测和巩固。压缩包内仅有一个PDF文件大小约10.6MB文字层清晰可复制方便检索定义、摘录公式并制作个人笔记。目前已有1457人浏览学习是不少高校线性代数课程推荐的参考教材。相比翻印版本这份原版PDF质量高、排版完整对于需要准确理解英文原意、做英文术语对照的读者尤为实用。1. 线性代数这样学才对路从一本教材到可运行的矩阵思维不少初学者抱着《线性代数及其应用》这本教材第一反应是去背定义、抄公式结果翻了二十页就卡在向量空间的抽象符号里。这本书的正确打开方式其实是从应用反推理论每一章都在回答一个问题——这个矩阵运算到底在解决什么现实问题它把高斯消元、特征值、最小二乘这些概念放到具体的图形变换、人口迁移、数据拟合场景里让读者先看到结论的价值再回头梳理推导。适合三类人准备机器学习入门却不懂矩阵原理的开发者、被传统教材劝退的理工科学生、需要系统补线性代数基础的数据从业者。关键不在于把书读完而在于每学一个概念都亲手用代码验证一遍。2. 章节骨架与选型理由为什么这本教材值得当主线2.1 七章递进的教学主线从解方程组到二次型的完整闭环全书主体七章排列顺序本身就是一条精心设计的认识路径。第一章从线性方程组切入用行化简算法解决“是否有解、有多少解”这个最朴素的问题第二章把视角从方程组抽象成矩阵代数引入乘法、逆、分块这些运算规则第三章讲行列式篇幅不长但定位精准——它是一种判断可逆性的辅助工具不是主角第四章进入向量空间列空间、零空间、秩这些概念开始回答“矩阵背后的几何结构是什么”第五章特征值与特征向量是全书的第一个高潮它把矩阵看作一种变换去找变换后方向不变的那些向量第六章正交性与最小二乘是工程价值最直接的一章线性回归的封闭解就落在这里第七章对称矩阵与二次型把二次曲面、主轴定理和多元函数的二阶近似串起来为后续优化算法铺路。这个顺序比很多上来先讲行列式的教材更符合认知规律。我辅导过的学生里A同学以前总觉得线性代数是一堆不相干的公式堆叠直到跟着这本书从方程组走到二次型才发现每一章都在为下一章铺台阶——第一章的消元法为第二章的逆矩阵提供算法基础第四维度的秩又为第五章的可对角化判断埋下伏笔。章节之间的耦合度非常高跳着读很容易断档。2.2 前置基础与使用门槛这本书到底需要读者会什么前置要求并不高。高中数学的函数、方程、几何直观基本够用微积分不是必要条件——前五章不碰导数积分第六、七章涉及一点偏导概念但不影响主线理解。真正的前置条件是“愿意把抽象符号和几何图形对应起来”的习惯。书中大量配图展示线性变换如何拉伸、旋转、投影平面上的向量这些图不是装饰是理解线性相关、特征空间这些概念的钥匙。门槛反而在计算熟练度上。这本书的应用题背景跨度大从电路网络到经济投入产出模型都有涉及读者需要能快速把现实场景翻译成矩阵方程。我见过某开发者卡在第4章的习题上不是因为题难而是因为他习惯用计算机算结果手算行化简太慢导致每题耗时过长。我的建议是前四章务必保留手算能力第五章之后再用工具加速原因会在后面的避坑章节展开。2.3 与常见教材的对比三个不可替代的优势对比维度本书特点常见纯理论教材常见刷题式辅导书理论深度证明完整但重心放在几何直观公理化程度高、符号抽象几乎不证只给结论章节顺序方程组先行、行列式靠后行列式讲解早且篇幅大按考点而非认知逻辑排应用场景每章内嵌真实应用例题应用仅在习题末尾出现应用与理论割裂习题层次概念题、计算题、应用题分层清晰计算题为主题型归纳为主自我验证配有常用术语表和学习指导依赖老师讲解直接对着答案抄选这本书当主线最核心的理由是它把“为什么学”和“怎么用”缝在了一起而不是像某些教材那样把应用塞进最后一章当作装饰品。对自学者来说这种结构能省下大量自己去找应用背景的时间。第五版经过多轮教学检验习题分级和配套资源的成熟度都比较稳定不存在某些新版教材“例题换汤不换药”的问题。3. 把概念变成可运行代码用数值验证打通前七章3.1 线性方程组的几何意义与三种解情形用 NumPy 做第一次验证第一章的核心是行化简手工做法是写增广矩阵然后倍加、对换、倍乘。用代码验证更直接而且能顺手理解 API 背后的数值方法。下面的脚本展示了两种全局非奇异方程组有唯一解奇异矩阵要么无解要么无穷多解。import numpy as np # 情形一系数矩阵可逆方程组有唯一解 # 对应书第1章两条直线的交点问题 A1 np.array([[3, 2], [1, -1]]) b1 np.array([7, 4]) x1 np.linalg.solve(A1, b1) print(唯一解:, x1) # [ 3. -1.] # 情形二系数矩阵奇异行列式为0无解 A2 np.array([[1, 2], [2, 4]]) b2 np.array([3, 5]) print(rank(A2) , np.linalg.matrix_rank(A2)) # 1 # 情形三同样奇异但b落在列空间内有无穷多解 b3 np.array([3, 6]) print(b3 在列空间内无穷多解)np.linalg.solve底层用的是 LU 分解不是课本上教的高斯消元但两者数学上等价。关键看两件事矩阵是否奇异由np.linalg.matrix_rank判断秩小于列数时方程组不可能有唯一解b是否落在列空间决定有解还是无解。这三个判断准则直接对应书里的存在性与唯一性定理。这里有个常见误用新手会用np.linalg.det(A2)判断可逆性行列式为 0 就认为无解。实际上行列式为零只能说明矩阵不可逆方程组可能是无解也可能是无穷多解还需要再检查b与列空间的关系。数值计算里我一般避免用行列式判断因为大矩阵的行列式极易溢出或下溢matrix_rank基于奇异值分解判断更稳。3.2 列空间、零空间与秩用 SVD 找到矩阵的“信息量”第四章的概念抽象程度陡增但对工程而言列空间、零空间、秩恰好对应三个实践问题哪些输出向量能由输入组合出来、哪些输入会被矩阵压成零向量、矩阵的真实维度有多大。下面构造一个秩亏矩阵演示零空间的数值求法。import numpy as np # 第三列 2 * 第一列 - 第二列因此列向量线性相关矩阵秩为2 A np.array([[1, 0, 2], [2, 1, 3], [1, 1, 1]]) rank np.linalg.matrix_rank(A) print(秩:, rank) # 2 # 用奇异值分解求零空间的一组基 U, s, Vt np.linalg.svd(A) null_mask s 1e-10 null_basis Vt.T[:, null_mask] print(零空间基的个数:, null_basis.shape[1]) print(验证 A null_basis ≈ 0:, np.allclose(A null_basis, 0))SVD 把矩阵拆成旋转、缩放、旋转三个动作奇异值正好等于缩放系数。奇异值接近 0 的那个方向就是矩阵“压扁”掉的维度对应的右奇异向量张成零空间。这比课本上用自由变量求零空间的方法更抗数值误差尤其适合秩亏矩阵因为浮点运算几乎不可能让行列式精确等于 0。参数说明np.linalg.svd默认返回U、s、Vt三件套s是一维奇异值数组null_mask的阈值1e-10不是固定不变的如果矩阵元素数量级很大或很小要按s.max() * eps * max(m, n)动态设置其中eps是浮点精度上限。零空间的基不是唯一的——课本手算得到的是某个特定自由变量组合SVD 给出的是正交规范基两组基张成的子空间相同但具体向量不同对答案时不要死磕数值一致。3.3 特征值与对角化用人口迁移模型验证 A^k 的核心公式第五章的核心公式是 A^k P D^k P⁻¹这个式子的威力在离散动力系统里体现得最充分。想预测一个两城市人口迁移系统 50 年后的状态直接算 A^50 计算量大得惊人对角化之后只需对特征值做幂运算。下面用随机矩阵验证两种方法的等价性。import numpy as np # 迁移矩阵每列和为1表示人口在两个城市间的流动比例 P np.array([[0.9, 0.2], [0.1, 0.8]]) vals, vecs np.linalg.eig(P) D np.diag(vals) # 方式一直接用对角化公式 P^k vecs * D^k * vecs^{-1} k 10 Pk_via_diag vecs np.diag(vals ** k) np.linalg.inv(vecs) # 方式二直接求矩阵幂 Pk_direct np.linalg.matrix_power(P, k) print(两种方式一致:, np.allclose(Pk_via_diag, Pk_direct))np.linalg.eig返回两个值vals是特征值数组vecs是以特征向量为列向量组成的矩阵。代码里的vecs np.diag(vals ** k) np.linalg.inv(vecs)就是公式的直观翻译是矩阵乘法运算符vals ** k对数组逐元素求幂np.diag把一维数组变成对角阵。需要注意特征向量的符号和缩放在数值库里是任意的——np.linalg.eig会把每个特征向量归一化到长度 1但方向可能取反。这会影响中间的vecs和逆矩阵但最终乘出来的结果一致因为两个负号抵消了。如果看到vals里出现复数不要慌那是正常现象实矩阵的特征值可能是虚数第五章后半部分还会专门讨论复特征值在振动系统里的意义。4. 习题与自测的正确节奏刷题分层加上代码互验4.1 习题分层的判断标准哪些必做、哪些可以直接跳过这本书的习题量非常大逐题刷完既无必要也不现实。我一般把习题分成三层。第一层是概念判断题通常在每节末尾前几题用文字和图形考察定义理解必做且速度要快目的是暴露理解漏洞第二层是计算题选三分之二做重点练行化简、逆矩阵、特征值手算熟练度目标是在十分钟内完成一个 3×3 矩阵的完整求解第三层是应用题和应用型习题选做与自己方向相关的即可——比如做计算机图形学的可以把线性变换那几题做透做数据科学的死磕最小二乘与二次型部分其他领域的看懂题面描述就行。判断自己是否掌握了某一节标准不是“题做出来了”而是“闭上书能说出这一节的定理在解决什么场景下的什么问题”。A同学曾经刷完第一章所有计算题但当被问到“什么时候方程组有无穷多解”他只能背出秩的条件却说不清几何上对应两条直线重合的情形。这就是典型的只练手、没练脑做题的效果打了对折。4.2 手算与 NumPy 互验的操作流程用代码当计算器每个章节的计算题我都建议采用“手算一遍 代码验证一遍”的双轨制。手算保证你理解算法流程代码验证保证结果不因笔误而白白浪费时间。下面是特征值习题的验证模板import numpy as np A np.array([[2, 1], [1, 2]]) vals, vecs np.linalg.eig(A) print(特征值:, vals) for i, lam in enumerate(vals): v vecs[:, i] left A v right lam * v print(f第{i1}组验证通过:, np.allclose(left, right))这个脚本做的事就是把定义式 A v λ v 逐条代入验证。enumerate遍历每个特征值的索引vecs[:, i]取出对应的特征向量列np.allclose判断浮点误差范围内是否相等默认容许误差是atol1e-08, rtol1e-05手算题里结果通常只有小数点后两三位这个容差绰绰有余。这种互验的价值不止于对答案。当手算结果和代码输出不一致时先别急着改代码回头检查手算步骤——绝大多数情况下问题出在行变换时丢掉负号或者解特征方程时展开错项。代码在这里扮演的角色是“无情的裁判”它不会在乎你的推导过程有多严密只认最后的数值对不对。这个过程本身就是最好的训练。4.3 验证时的边界情况零特征向量与重根问题互验脚本里最容易翻车的地方是重根。比如二阶矩阵特征值出现二重根时np.linalg.eig返回的两个特征向量可能相等也可能由于数值误差而不严格正交触碰课本里的实对称矩阵重根情形手算可以用正交化方法补全特征向量但代码库不会自动替你完成。碰到这种情况验证脚本仍然能跑通——因为每个特征向量依然满足定义式——但如果你试图拿这些向量拼成可对角化的 P 矩阵逆矩阵可能存在数值病态。我的习惯是遇到重根先检查矩阵是否对称如果对称则默认可对角化直接用特征向量拼 P如果非对称优先判断几何重数是否等于代数重数。数值上可以用np.linalg.matrix_rank(vecs)判断特征向量矩阵是否满秩秩小于矩阵阶数就意味着不可对角化继续套 A^k P D^k P⁻¹ 公式就会得到错误结果。5. 学习这本书的五个常见坑现象、原因与解决5.1 计算层的三个坑第一个坑解完方程组不回头验算结果连错好几章还不知道。现象是作业本上前几章的计算题全对但应用题里嵌套计算时频频失分原因是消元过程中的倍加运算一步错后续全部白算手写验算又费时间解决方法是养成“解完立刻代入原方程组”的习惯——不用全部重算挑一个简单方程代入即可如果等号明显不成立就返回上一步检查行变换系数。第二个坑盲目相信np.linalg.det判断可逆性在工程场景里踩坑。现象是用一个十几阶的矩阵算完行列式得到极小但非零的值于是判定可逆结果求解时数值发散原因是行列式随矩阵阶数指数级增长大矩阵的行列式即使逻辑上为零浮点误差也会让它变成一个微小非零数解决方法是优先用np.linalg.matrix_rank或np.linalg.cond判断条件数条件数远大于 1 的矩阵即使可逆求解结果也不可信实践中要把这类矩阵当奇异矩阵处理。第三个坑手算特征多项式时展开错误百出。现象是第五章习题里 3×3 矩阵的特征值怎么都凑不出书后的答案原因是特征多项式展开涉及大量符号运算漏项、错号几乎不可避免解决方法是先用特征多项式的一个必要条件自检——特征值之和等于矩阵的迹特征值之积等于行列式这三个条件能挡掉大部分手算错误。用代码验证时可以顺手加一行np.sum(vals)与对角元素和对比。5.2 概念层的两个坑第四个坑跳过几何直观章节把向量空间当纯符号游戏。现象是能背出零空间、列空间的定义但遇到“为什么最小二乘解要投影到列空间”就卡住原因是这个问题的答案藏在线性变换的几何图示里跳过配图等于丢掉了最重要的理解工具解决方法是从第四章开始每学一个子空间都画一张示意图至少要做到闭眼能想象出三维空间中两条直线的相对位置关系以及矩阵作用后空间被拉伸、压扁的方向。第五个坑把行列式当主角但书里从没把它当主角用。现象是花大量时间背行列式展开的各种技巧到第六章才发现行列式在最小二乘里几乎不再出现原因是许多国内教材把行列式放到最前面且篇幅极大形成先入为主的认知惯性解决方法是接受这本书的定位——行列式是判断可逆性的便捷工具数值决策时永远优先考虑秩和条件数。把省下来的时间花在特征值和奇异值的几何意义上性价比高得多。6. 把书读薄再读厚从最小二乘到 PCA 的代码验证路径书看到第六、七章时知识开始和工程真正接轨。线性回归的最小二乘解、数据降维的主成分分析、二次型在最优化中的应用本质上是同一套知识的三个面向。我建议读完前七章后立刻做一个 PCA 验证实验把书中的数学和机器学习中的算法对应起来。核心思想是把数据去中心化后主方向就是协方差矩阵的特征向量而 SVD 可以绕过构造协方差矩阵直接在原始数据上求出同样的方向。import numpy as np rng np.random.default_rng(42) X rng.normal(size(100, 2)) X[:, 1] 2 * X[:, 0] 0.3 * rng.normal(size100) Xc X - X.mean(axis0) C Xc.T Xc / (Xc.shape[0] - 1) vals, vecs np.linalg.eig(C) idx np.argmax(vals) principal_cov vecs[:, idx] U, s, Vt np.linalg.svd(Xc, full_matricesFalse) principal_svd Vt[0] print(两法主方向一致:, np.allclose(np.abs(principal_cov), np.abs(principal_svd)))这段代码把两个久负盛名的方法放在一起验证特征分解求主方向SVD 求主方向结果应该一致。rng是可复现的随机数生成器42 只是种子保证每次运行数据相同Xc.shape[0] - 1是无偏估计的分母对应样本量减一np.argmax(vals)取出最大特征值的索引SVD 的Vt中每一行对应一个主方向第一行对应最大奇异值。最终的np.allclose(np.abs(...))用绝对值比较是因为特征向量和奇异向量的方向符号约定不同但方向本身一致。做完这个实验你会有一种“把书读薄了”的感觉——原来第五章的特征值、第六章的正交投影、第七章的二次型落到数据上就是一行np.linalg.svd。反过来如果你在 PCA 的每一步都能对应回课本的某个定理那这本书就算真正读透了。我自己的习惯是每读完一章就写一个不超过二十行的脚本去复现本章最核心的一个结论从高斯消元到特征值分解一路做下来到第七、八章时回头翻书那些曾经觉得吃力的符号推导已经不再劝退。希望这篇笔记能帮你在矩阵的世界里少走几步弯路。本文还有配套的精品资源点击获取

相关新闻

OFDM子载波映射如何对抗频偏?误码率优化的完整思路

OFDM子载波映射如何对抗频偏?误码率优化的完整思路

OFDM系统对子载波正交性的要求可以用一句话来概括:只要频偏存在,子载波之间的正交性就会被破坏。我这两年调试接收机的过程中,在子载波映射这块踩过不少坑,也积累了一些实际经验,从最初误码动不动到1e-1,到…

2026/10/15 16:14:35 阅读更多 →
微服务集成验证实战:契约驱动的系统可靠性建设

微服务集成验证实战:契约驱动的系统可靠性建设

1. 项目概述:这门课到底在讲什么,值不值得花时间啃? “第07讲:集成、验证与面试题精讲”——光看标题,很多人第一反应是:“又一门网课的中间章节?是不是照本宣科讲讲概念、放几道题就完事&#…

2026/10/15 16:14:35 阅读更多 →
全英视频看的难受?开腾讯会议英译中

全英视频看的难受?开腾讯会议英译中

2026/10/15 16:14:35 阅读更多 →

最新新闻

MATLAB常用信号处理函数清单:从FFT到滤波器实战指南

MATLAB常用信号处理函数清单:从FFT到滤波器实战指南

1. 项目概述:为什么要单独整理一份信号处理函数清单做信号处理这几年,我最大的感受就是:MATLAB的功能强大到让人眼花缭乱,但真正高频使用的函数翻来覆去就那么几十个。很多初学者最容易犯的毛病,是一上来就抱着几百页的…

2026/10/15 17:18:28 阅读更多 →
拓扑优化入门:99行与88行程序对比及OC与MMA算法解析

拓扑优化入门:99行与88行程序对比及OC与MMA算法解析

简介:这份资源面向拓扑优化初学者与结构优化方向的学生、研究人员,提供一套可直接运行的MATLAB入门程序,涵盖优化准则法(OC)与移动渐近线法(MMA)两种主流求解思路,帮助读者理解如何在…

2026/10/15 17:18:28 阅读更多 →
Agent Skills 标准实战:用 SKILL.md 让 AI Agent 真正学会干活

Agent Skills 标准实战:用 SKILL.md 让 AI Agent 真正学会干活

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 17:18:28 阅读更多 →
开题报告写到崩溃?这份“保姆级”通关攻略请收好

开题报告写到崩溃?这份“保姆级”通关攻略请收好

每到毕业季,无数本科生的第一道坎往往不是毕业论文答辩,而是开题报告。选题不知道从哪下手,研究思路理不清,格式改了又改还是被导师打回重写,不少同学一提到“开题报告”四个字就头皮发麻。其实,过来人都清…

2026/10/15 17:18:28 阅读更多 →
CANopen协议栈源码拆解:从对象字典到PDO映射的嵌入式实现

CANopen协议栈源码拆解:从对象字典到PDO映射的嵌入式实现

简介:CANopen完整源码是一套面向嵌入式控制开发者的开源协议栈实现,基于CAN总线构建,适合从事工业自动化、运动控制、汽车电子等领域的工程师与学习者研究和使用。资源包共77个文件,以C语言源文件与头文件为主体(28个.…

2026/10/15 17:18:28 阅读更多 →
STM32驱动MAX6675测温:SPI时序解析与避坑实战

STM32驱动MAX6675测温:SPI时序解析与避坑实战

简介:这份资源是面向嵌入式初学者与STM32开发者的MAX6675测温驱动测试例程,基于STM32F103与K型热电偶专用芯片MAX6675搭建,重点解决SPI通信配置、冷端补偿读取与温度数据解析等实际问题,适合用于温度采集类课程设计、实验验证或工…

2026/10/15 17:17:27 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →