张量篇 第 T1 章 向量与二阶张量
对应原书:James G. Simmonds《A Brief on Tensor Analysis》第 2 版(Springer, 1994),第 I 章 Introduction: Vectors and Tensors(书 p.1–24,PDF p.14–37)。
本篇定位。 Simmonds 这本小书是写给连续介质力学学生的:例子是力、力矩、应力、刚体转动、流体。张量分析和量化交易的直接关联有限,你在交易系统里不会遇到 Christoffel 符号。它对量化学习者的价值集中在三处:
- 指标记号与 Einstein 求和约定,就是
numpy.einsum和高维数组运算的数学语言;- 协变/逆变分量与基变换,对应变量换元、因子旋转、协方差矩阵在线性变换下的变换规律 \(\Sigma\to A^T\Sigma A\);
- 一般坐标下的多元微积分(梯度、Hessian、链式法则),对应优化与风险敏感度,以及“重参数化之后梯度和 Hessian 怎么变”。
本篇四章按原书四章组织。本章打基础:向量与 2 阶张量的不依赖坐标的定义,以及它们在笛卡尔坐标下的分量。和 Horn & Johnson 主体部分相比,本章的线性代数内容不难,重点在于建立一种看问题的习惯:先有几何对象,坐标只是它的一种表示。
学习目标
读完本章,你应当能够:
- 说清"向量"和"向量的分量"的区别,理解什么叫几何不变量,并用无角度的公式 \(\mathbf u\cdot\mathbf v=\frac12(|\mathbf u|^2+|\mathbf v|^2-|\mathbf v-\mathbf u|^2)\) 解释点积为什么与坐标轴无关。
- 掌握叉积、标量三重积与行列式的关系,以及向量三重积公式(只需会用,不必深究三维专属的内容)。
- 理解 2 阶张量 = 把向量映成向量的线性算子,会用并矢(外积)\(\mathbf{uv}\)、投影张量 \(\bar{\mathbf u}\bar{\mathbf u}\) 构造张量。
- 会用 \(\mathbf u\cdot\mathbf T\mathbf v=\mathbf v\cdot\mathbf T^T\mathbf u\) 定义转置,做对称–反对称分解;会求张量的笛卡尔分量 \(T_{ij}=\mathbf e_i\cdot\mathbf T\mathbf e_j\)。
- 把协方差矩阵看成对称 2 阶张量、把组合方差看成二次型、把因子中性化看成投影张量的作用,并用
numpy.einsum写出这些运算。
读前导读
先说清楚:张量篇对量化是选读
张量篇(T1–T4)原本是写给学力学的学生的,例子是力、力矩、应力、刚体转动。坦白说,做量化交易不需要读完它。你在因子模型、组合优化、衍生品定价里不会碰到叉积、Christoffel 符号或曲面几何。如果时间紧,可以整篇跳过,不影响后面各册。
那为什么还放在这里?因为其中有几处想法,量化工作里确实会反复用到,而用张量的语言讲得比矩阵语言更清楚。本章里真正值得花时间的是这几处:
- "对象"和"坐标"分开看(T1.1、T1.2.2)。一个组合的风险是客观存在的,不管你用单只股票、行业组合还是主成分来记权重,方差都一样,变的只是数字。这个习惯能帮你理解为什么 \(\Sigma\to Q^T\Sigma Q\)、为什么因子旋转不改变风险。
- 并矢(外积)(T1.4.2)。\(\mathbf{uv}\) 就是 \(uv^T\)。协方差矩阵是收益外积的平均,单因子模型的系统性风险 \(\sigma_m^2\boldsymbol\beta\boldsymbol\beta\) 是一个并矢,PCA 的谱分解是若干并矢之和。
- 投影张量(T1.4.2)。因子中性化、回归残差,都是"减去在某方向上的投影"。
- 二次型只看对称部分(例 1.6 之后)。这解释了为什么协方差矩阵、Hessian 总可以取成对称的。
- einsum 记号(实战 1、2)。如果你用 Python 写多维数组运算,这个工具能省很多事。
可以跳过的部分:T1.3 叉积与三重积(三维专属,只需记住"行列式 = 有向体积"一句)、例 1.6 的叉积矩阵、T1.6 中关于应力(习题 1.20–1.21)和反对称张量平方(习题 1.26)的条目。
这一章在解决什么问题
一句话:向量和矩阵本来是几何对象(箭头、线性变换),坐标里的那串数字只是它在某组基下的"报价"。打个比方:一只股票的价值是确定的,用人民币报价是一串数,用美元报价是另一串数,报价随汇率变,价值不变。本章先用不依赖坐标的方式定义点积和 2 阶张量,再推出你熟悉的分量公式,这样分量公式"换坐标不变"就是自动成立的。
需要先想起来的数学
1. 向量的点积与长度。 \(\mathbf u\cdot\mathbf v=\sum u_iv_i\),\(|\mathbf v|=\sqrt{\mathbf v\cdot\mathbf v}\)。例:\((1,2)\cdot(3,-1)=1\)。点积为零即垂直。见 第 00 册第 06 章 线性代数速成。
2. 矩阵就是线性变换。 矩阵 \(T\) 作用在向量上 \(T\mathbf v\),满足 \(T(a\mathbf v+b\mathbf w)=aT\mathbf v+bT\mathbf w\)。\(T\) 的第 \(j\) 列就是 \(T\) 作用在第 \(j\) 个基向量 \(\mathbf e_j\) 上的结果。见 第 00 册第 06 章。
3. 行列式。 \(2\times2\) 时 \(\det\begin{bmatrix}a&b\\c&d\end{bmatrix}=ad-bc\),绝对值等于两列向量围成的平行四边形面积。见 第 00 册第 06 章。
本章符号速查。 粗体 \(\mathbf v\) 表示向量本身(几何对象),\(v_x,v_y,v_z\) 是它的分量。\(\mathbf v\sim(v_x,v_y,v_z)\) 读作"\(\mathbf v\) 在这组基下的分量是……",故意不用等号。\(\equiv\) 表示"定义为"。\(\bar{\mathbf u}=\mathbf u/|\mathbf u|\) 是单位向量(上划线不是均值)。两个粗体字母并排 \(\mathbf{uv}\) 不是乘法,是并矢(外积),对应矩阵 \(uv^T\)。\(\mathbf 1\) 是单位张量(单位矩阵 \(I\)),\(\mathbf O\) 是零张量。\(E_3\) 是三维欧氏空间。\(\forall\) 读作"对所有"。
怎么读这一章
建议路线:T1.1 快速浏览(只要抓住"向量 = 等价类,分量 = 表示")→ T1.2.2 点积的不变定义与量化注记 → 跳过 T1.3 → T1.4 全部 → T1.5.1 → 实战 2。实战 1 只是验证原书例题,可以略过。整章大约一小时可以读完。
T1.1 向量:箭头的等价类
T1.1.1 有向线段与几何向量
在三维欧氏空间 \(E_3\) 中,一个箭头(arrow)是有序点对 \((A,B)\),记作 \(\overline{AB}\),\(A\) 为尾、\(B\) 为头。两个箭头如果能通过平行移动重合,就称为等价。
(几何)向量(vector)定义为与某个箭头等价的全体箭头组成的集合,也就是一个等价类(equivalence class)。平时我们用其中任意一个箭头代表它。
作者用有理数作类比:计算机把 \(2/3\) 存成整数对 \((2,3)\),判断 \((a,b)\) 与 \((c,d)\) 是否代表同一个数用 \(ad=bc\)。有理数 \(a/b\) 本质上是满足 \(ad=bc\) 的整数对 \((c,d)\) 的等价类。日常把"数"和它的表示混用,同样也把"向量"和它的某个箭头混用。
由此定义:
- 长度 \(|\mathbf v|\):任一代表箭头的长度。零向量 \(\mathbf 0\) 是唯一长度为零的向量。
- 方向(单位向量):\(\bar{\mathbf v}=\mathbf v/|\mathbf v|\),\(\mathbf v\ne\mathbf 0\)(式 1.1)。\(\mathbf 0\) 没有方向。
- 选定原点 \(0\) 后,从 \(0\) 指向点 \(P\) 的向量 \(\mathbf x\) 称为 \(P\) 的位置(position)。
原书脚注里留了一个伏笔:这个"平行移动"的定义在球面上没有意义,因为球面上没有整体的平行移动概念。第 T4 章的协变导数和曲率正是在处理这个问题。
T1.1.2 加法、数乘与向量空间
两向量相加有两种等价的作图法:首尾相接法则(head-to-tail rule)和平行四边形法则(parallelogram rule)。前者便于连加多个向量,后者使交换律一目了然。数乘 \(\alpha\mathbf v\) 就是把箭头伸缩 \(\alpha\) 倍。
全体几何向量连同加法和数乘构成线性向量空间(linear vector space)。原书顺带提到其他例子:\(n\) 次多项式全体、\(n\) 阶线性齐次常微分方程的解全体、\(m\times n\) 矩阵全体。对量化读者再补一个:同一组 \(N\) 只资产上的全部组合权重向量也构成向量空间。
T1.1.3 向量能表示什么,向量加法未必有意义
原书强调两点,量化里同样适用:
(A) 不同种类的对象属于不同的向量空间。 力和位移都可以用箭头表示,但不能相加。为了省事常把它们画在同一张图上,这只是作图习惯。
(B) 向量加法未必反映被表示对象的某种属性。 位移、作用于同一点的力确实按向量法则相加(这是实验事实);而绕定点的有限转动虽然可以用向量(方向 = 转轴,长度 = 转角)表示,相继两次转动的合成却不等于两个向量之和。原书用"20 名学生、30 把椅子,平均每把椅子 2/3 个学生"作比喻:这是对数做的数学运算,不代表真有 2/3 个学生。
对应到量化:组合权重相加有明确的经济含义(两个组合合并持有);而把"A 股票的 PE"和"B 股票的 PE"所在的向量相加,就可能只是数学操作。弄清一个向量运算是否有含义,是建模的第一步。
T1.2 笛卡尔坐标与点积
T1.2.1 笛卡尔分量
过原点取三条互相垂直的轴,按右手法则定出单位向量 \(\mathbf e_x,\mathbf e_y,\mathbf e_z\)。点 \(P\) 的笛卡尔坐标 \((x,y,z)\) 是它到三个坐标平面的有向垂直距离。向量 \(\mathbf v\) 以原点为尾时,头的坐标 \((v_x,v_y,v_z)\) 称为它的笛卡尔分量(Cartesian components),记 \(\mathbf v\sim(v_x,v_y,v_z)\)。这里用"\(\sim\)"而不用"\(=\)",正是为了提醒:分量是向量的表示,不是向量本身。
由几何直接推出:
以及 \(\mathbf v=v_x\mathbf e_x+v_y\mathbf e_y+v_z\mathbf e_z\)(式 1.16),表示唯一。\(\{\mathbf e_x,\mathbf e_y,\mathbf e_z\}\) 称为标准笛卡尔基。
T1.2.2 不用角度定义点积
常见定义 \(\mathbf u\cdot\mathbf v=|\mathbf u||\mathbf v|\cos\theta\) 有个循环论证的问题:如果我们只会量长度,\(\theta\) 怎么算?只能反过来用这个式子定义 \(\theta\)。所以需要一个只用长度的定义。
把 \(\mathbf v\) 分解为平行于 \(\mathbf u\) 的部分 \(|\mathbf v|\cos\theta\,\bar{\mathbf u}\) 和垂直部分 \(\mathbf v_\perp\),两次用勾股定理:
推导拆解:第二行的最后一个等号是怎么来的? 第一步,\(\mathbf v-\mathbf u\) 也分解成平行和垂直两部分:平行部分长度是 \(|\mathbf v|\cos\theta-|\mathbf u|\)(\(\mathbf v\) 的平行部分减去 \(\mathbf u\) 本身),垂直部分还是 \(\mathbf v_\perp\)(\(\mathbf u\) 没有垂直分量)。用勾股定理得第一个等号。 第二步,展开平方:\(|\mathbf v|^2\cos^2\theta-2|\mathbf u||\mathbf v|\cos\theta+|\mathbf u|^2+|\mathbf v_\perp|^2\)。 第三步,由第一行,\(|\mathbf v_\perp|^2=|\mathbf v|^2-|\mathbf v|^2\cos^2\theta\),代入后 \(\cos^2\theta\) 项抵消,得 \(-2|\mathbf u||\mathbf v|\cos\theta+|\mathbf u|^2+|\mathbf v|^2\)。 把 \(|\mathbf u||\mathbf v|\cos\theta\) 解出来,就是 (1.11) 右边。这样定义的好处是右边只有三个长度,任何人不管怎样摆坐标轴,量出来的长度都一样。
这就是余弦定理。于是得到点积的定义:
特例 \(\mathbf v\cdot\mathbf v=|\mathbf v|^2\)。点积为零称正交(orthogonal)。代入分量公式得熟悉的
几何不变量(geometric invariant)。换一组笛卡尔轴,每个分量乘积 \(u_xv_x\) 都会变,但它们的和不变,因为 (1.11) 只用到长度,而长度和坐标轴无关。这是全书反复使用的思路:先给出不依赖坐标的定义,再推出分量公式,分量公式的不变性就自动成立。
分配律 \(\mathbf u\cdot(\mathbf v+\mathbf w)=\mathbf u\cdot\mathbf v+\mathbf u\cdot\mathbf w\) 用 (1.13) 一行可证;作者在习题 1.7 中要求只用 (1.11) 证明,提示是平行四边形定律 \(2|\mathbf a|^2+2|\mathbf b|^2=|\mathbf a+\mathbf b|^2+|\mathbf a-\mathbf b|^2\)。
量化注记:极化恒等式。 (1.11) 在统计里就是 \(\operatorname{Cov}(X,Y)=\frac12[\operatorname{Var}X+\operatorname{Var}Y-\operatorname{Var}(X-Y)]\)。它说明:只要知道所有组合的方差("长度"),所有协方差("点积")就确定了。价差交易里常用 \(\operatorname{Var}(X-Y)\) 来反推两腿的相关性,就是这个公式。
例 1.1 \(\mathbf u\sim(1,2,3)\),\(\mathbf v\sim(-3,1,-2)\)。\(\mathbf u\cdot\mathbf v=-3+2-6=-7\),\(|\mathbf u|=|\mathbf v|=\sqrt{14}\),\(\theta=\cos^{-1}(-7/14)=120^\circ\)。
习题 1.8 给出 Schwarz 不等式 \(|\mathbf u\cdot\mathbf v|\le|\mathbf u||\mathbf v|\) 的三种证法,其中"二次多项式 \(p(x)=|\mathbf u+x\mathbf v|^2\ge0\),故判别式 \(\le0\)"这一证法可以原封不动搬到随机变量上,得到相关系数 \(|\rho|\le1\)。函数版本 \(\left|\int_a^bfg\,dx\right|\le\sqrt{\int_a^bf^2dx}\sqrt{\int_a^bg^2dx}\) 也在该题中。
T1.3 叉积与三重积(三维专属,简要了解)
叉积只在三维存在(高维中要用 Grassmann 代数的楔积),与量化交易没有直接关联。但它引出的"行列式 = 有向体积"和置换符号 \(\epsilon_{ijk}\) 在第 T2 章会用到,所以这里简要过一遍。
定义。 \(\mathbf u\times\mathbf v\) 是以 \(\mathbf u,\mathbf v\) 为邻边的平行四边形的右手定向面积:\(|\mathbf u\times\mathbf v|=|\mathbf u||\mathbf v|\sin\theta\),方向由右手法则确定。由定义 \(\mathbf u\times\mathbf v=-\mathbf v\times\mathbf u\)。
标量三重积 \((\mathbf u\times\mathbf v)\cdot\mathbf w\) 的绝对值是以 \(\mathbf u,\mathbf v,\mathbf w\) 为棱的平行六面体体积,并且在循环置换下不变:
叉积分配律的证明用到一个以后常用的引理:两向量相等,当且仅当它们与所有向量 \(\mathbf c\) 的点积相等(取 \(\mathbf c=\mathbf u-\mathbf v\) 即得)。
分量形式:
所以行列式就是有向体积。这个解释在量化里有用:协方差矩阵的行列式(广义方差)是收益分布"椭球"体积的平方的倍数,行列式接近零说明资产近乎共线。
向量三重积(例 1.2,原书不用分量给出证明):
证明思路值得一看:左边垂直于 \(\mathbf u\times\mathbf v\),所以落在 \(\mathbf u,\mathbf v\) 张成的平面内,可写成 \(A\mathbf u+B\mathbf v\);左边又垂直于 \(\mathbf w\),得 \(A=-C(\mathbf v\cdot\mathbf w)\)、\(B=C(\mathbf u\cdot\mathbf w)\);最后通过两次取特殊向量并点乘,证明比例因子 \(C\equiv1\)。
例 1.3 求同时垂直于 \(\mathbf a\sim(1,-2,3)\)、\(\mathbf b\sim(-1,0,1)\) 的单位向量。\(\mathbf a\times\mathbf b\sim(-2,-4,-2)\),\(|\mathbf a\times\mathbf b|=2\sqrt6\),故 \(\mathbf e\sim\pm(1,2,1)/\sqrt6\)。也可以直接解 \(\mathbf e\cdot\mathbf a=\mathbf e\cdot\mathbf b=0\)。
T1.4 张量:把向量映成向量的线性算子
T1.4.1 动机:力是泛函,力矩是算子
恒力 \(\mathbf F\) 沿位移 \(\mathbf D\) 做功 \(\mathbf F\cdot\mathbf D\)。力和位移单位不同,属于不同的空间,严格说不能直接"点乘"。更自然的看法是:力是一个线性泛函(linear functional),它把任一位移向量映成一个实数(功)。这就是后来"对偶空间""余向量"的直观来源,第 T2 章的地窖(协变)分量会把它落实。
同理,力矩 \(\mathbf x\times\mathbf F\) 引出把向量映成向量的线性算子,这类算子称为 2 阶张量(second order tensor)。"张量"一词来自弹性力学:应力张量作用在一个面的单位法向上,给出跨该面的张力。
金融直觉:"力是把位移映成功的线性泛函"在金融里有一个完全对应的例子:价格向量。持仓 \(\mathbf h\) 的单位是"股",价格 \(\mathbf p\) 的单位是"元/股",两者本来不在同一个空间,但 \(\mathbf p\cdot\mathbf h\) 给出组合市值(元)。更准确的说法是:价格是一个把持仓映成金额的线性函数。同样,组合方差对权重的梯度(边际风险 \(2\Sigma\mathbf w\))也是这种对象,它吃进一个权重的变化量、吐出方差的变化量。 这个区分在笛卡尔坐标下看不出来,所以平时可以混着用;第 T2 章换成非正交的基(例如用因子组合当交易单位)时,"持仓类"和"价格/梯度类"的分量会按不同规则变换,这时区分就有用了。
全书立场。 作者在序言里说,他本科时被"2 阶张量是 \(n^2\) 个按某规则变换的对象"这种定义吓退了。本书的立场是:2 阶张量就是线性算子,变换规则是推论而不是定义。对已经学过矩阵的读者来说,这意味着:2 阶张量就是线性变换,矩阵是它在某组基下的表示。
T1.4.2 投影与并矢
最简单的非平凡张量是投影:
它对 \(\mathbf v\) 是线性的:\(\mathrm{Proj}_{\mathbf u}(\beta\mathbf v+\gamma\mathbf w)=\beta\,\mathrm{Proj}_{\mathbf u}\mathbf v+\gamma\,\mathrm{Proj}_{\mathbf u}\mathbf w\),所以是张量。
推广得到直积或并矢(direct product / dyad)\(\mathbf{uv}\),许多书记作 \(\mathbf u\otimes\mathbf v\):
特别地 \(\mathrm{Proj}_{\mathbf u}=\bar{\mathbf u}\bar{\mathbf u}\)。在分量下,\(\mathbf{uv}\) 就是外积矩阵 \(uv^T\),np.outer(u, v) 或 np.einsum('i,j->ij', u, v)。下面会看到,任何 2 阶张量都能写成并矢的线性组合。
白话解释:并矢 \(\mathbf{uv}\) 的作用是"先用 \(\mathbf v\) 给输入打个分,再把分数乘到 \(\mathbf u\) 上"。小例子:\(\mathbf u\sim(1,2)\),\(\mathbf v\sim(3,1)\),\(\mathbf w\sim(1,1)\)。按定义 \(\mathbf{uv}(\mathbf w)=\mathbf u(\mathbf v\cdot\mathbf w)=4\mathbf u\sim(4,8)\)。按矩阵算,\(uv^T=\begin{bmatrix}3&1\\6&2\end{bmatrix}\),乘 \((1,1)^T\) 也是 \((4,8)\)。 金融直觉:单因子模型里,组合 \(\mathbf w\) 的市场暴露是 \(\boldsymbol\beta\cdot\mathbf w\)(打分),每只资产与该组合之间的系统性协方差是 \(\sigma_m^2\boldsymbol\beta(\boldsymbol\beta\cdot\mathbf w)\)(第 \(i\) 个分量是 \(\sigma_m^2\beta_i\cdot\) 组合 beta)。所以系统性协方差矩阵 \(\sigma_m^2\boldsymbol\beta\boldsymbol\beta^T\) 正是一个并矢。并矢的输出永远沿 \(\mathbf u\) 方向,所以它的秩是 1:单因子只能解释一个方向上的风险。
T1.4.3 基本定义
给定张量 \(\mathbf T\),就是知道它对每个向量 \(\mathbf v\) 的作用 \(\mathbf T\mathbf v\)。原书脚注提醒,严格地说还要指明定义域和值域,二者常常不同:惯性张量的定义域是角速度空间,值域是角动量空间。(量化对应:协方差矩阵把"权重空间"映到"风险贡献/边际风险空间",第 T2 章再讨论。)
- 相等:\(\mathbf S=\mathbf T\iff\mathbf S\mathbf v=\mathbf T\mathbf v,\ \forall\mathbf v\iff\mathbf u\cdot\mathbf S\mathbf v=\mathbf u\cdot\mathbf T\mathbf v,\ \forall\mathbf u,\mathbf v\)(式 1.31–1.32)。
- 零张量 \(\mathbf O\mathbf v=\mathbf 0\);单位张量 \(\mathbf 1\mathbf v=\mathbf v\)。
- 转置:唯一满足下式的张量 \(\mathbf T^T\):
- 对称 \(\mathbf T=\mathbf T^T\);反对称(skew)\(\mathbf T=-\mathbf T^T\);奇异:存在 \(\mathbf v\ne\mathbf 0\) 使 \(\mathbf T\mathbf v=\mathbf 0\)。
- 对称–反对称分解:
注意转置是用点积定义的,不是"把矩阵翻过来"。在笛卡尔基下二者一致;到了第 T2 章的斜基下,"转置张量"的分量矩阵就不再是原分量矩阵的转置了,这是本书反复提醒的陷阱。
白话解释:为什么要绕个弯用点积定义转置?因为"把矩阵沿对角线翻过来"是对一串数字的操作,换一组基,数字变了,翻转的结果也可能不再代表同一个对象。而 (1.33) 只用到点积和张量的作用,这两样都不依赖坐标,所以定义出来的 \(\mathbf T^T\) 是一个确定的几何对象。在标准正交基下,\(\mathbf u\cdot T\mathbf v=u^TTv\),\(\mathbf v\cdot T^T\mathbf u=v^TT^Tu\),两者是同一个数(标量的转置等于自身),所以平常"翻矩阵"的做法恰好对。
例 1.4 设 \(\mathbf v\sim(v_x,v_y,v_z)\) 时 \(\mathbf T\mathbf v\sim(-2v_x+3v_z,\,-v_z,\,v_x+2v_y)\),求 \(\mathbf T^T\mathbf v\)。设 \(\mathbf T^T\mathbf v\sim(a,b,c)\),\(\mathbf u\sim(\alpha,\beta,\gamma)\),由 \(\mathbf u\cdot\mathbf T^T\mathbf v=\mathbf v\cdot\mathbf T\mathbf u\):
比较 \(\alpha,\beta,\gamma\) 的系数,\(\mathbf T^T\mathbf v\sim(-2v_x+v_z,\,2v_z,\,3v_x-v_y)\)。
T1.5 2 阶张量的笛卡尔分量
T1.5.1 分量矩阵
由线性,\(\mathbf T\mathbf v=v_x\mathbf T\mathbf e_x+v_y\mathbf T\mathbf e_y+v_z\mathbf T\mathbf e_z\)。所以只要知道 \(\mathbf T\) 对三个基向量的作用就够了。把 \(\mathbf T\mathbf e_j\) 展开:
9 个系数组成矩阵 \(T\),第 \(i\) 行第 \(j\) 列为 \(T_{ij}\),\(\mathbf T\mathbf e_j\) 的分量构成 \(T\) 的第 \(j\) 列。记忆公式:
推导拆解:这个记忆公式分两步读。先算 \(\mathbf T\mathbf e_j\),它是 \(T\) 的第 \(j\) 列(式 1.37–1.39)。再和 \(\mathbf e_i\) 点积,在正交单位基下,"和 \(\mathbf e_i\) 点积"就是取出第 \(i\) 个分量。合起来就是第 \(i\) 行第 \(j\) 列。 协方差的例子:\(\Sigma_{ij}=\mathbf e_i\cdot\Sigma\mathbf e_j\) 是"只持有一单位资产 \(j\) 的组合"和"只持有一单位资产 \(i\) 的组合"之间的协方差。\(\mathbf e_i\cdot\Sigma\mathbf e_i\) 是资产 \(i\) 自己的方差。一般地 \(\mathbf u\cdot\Sigma\mathbf v\) 是组合 \(\mathbf u\) 与组合 \(\mathbf v\) 的协方差。
例 1.5 例 1.4 中 \(\mathbf T\mathbf e_x\sim(-2,0,1)\),\(\mathbf T\mathbf e_y\sim(0,0,2)\),\(\mathbf T\mathbf e_z\sim(3,-1,0)\),故
例 1.6 "\(\mathbf u\times\)"作用于 \(\mathbf v\) 得 \(\mathbf u\times\mathbf v\),它是 2 阶张量,分量矩阵是反对称的"叉积矩阵":
习题 1.18 证明反过来也对:三维中任一反对称张量 \(\mathbf A\) 都有唯一的轴向量 \(\boldsymbol\omega\) 使 \(\mathbf A\mathbf v=\boldsymbol\omega\times\mathbf v\),并且对任意维的反对称张量有 \(\mathbf v\cdot\mathbf A\mathbf v=0\)。后者在量化里有一个直接推论:二次型只"看得见"矩阵的对称部分,所以协方差估计、二次型优化中的矩阵总可以取为对称的。
推导拆解:为什么 \(\mathbf v\cdot\mathbf A\mathbf v=0\)?由转置定义 (1.33),\(\mathbf v\cdot\mathbf A\mathbf v=\mathbf v\cdot\mathbf A^T\mathbf v\);反对称意味着 \(\mathbf A^T=-\mathbf A\),所以 \(\mathbf v\cdot\mathbf A\mathbf v=-\mathbf v\cdot\mathbf A\mathbf v\),只能等于 0。再用分解 (1.35),任意 \(\mathbf K\) 的二次型 \(\mathbf v\cdot\mathbf K\mathbf v\) 等于对称部分的二次型加 0。 数值例:\(K=\begin{bmatrix}1&4\\0&1\end{bmatrix}\),对称部分 \(\begin{bmatrix}1&2\\2&1\end{bmatrix}\)。取 \(v=(1,1)\),两者的二次型都是 6。实务含义:数值计算有时会让协方差矩阵出现 \(10^{-15}\) 级的不对称,求特征值前做一次 \((\Sigma+\Sigma^T)/2\) 不会改变任何组合方差。
T1.5.2 并矢基
二维情形,\(v_x\mathbf e_x=(\mathbf v\cdot\mathbf e_x)\mathbf e_x=\mathbf e_x\mathbf e_x(\mathbf v)\),于是
三维中唯一地有
9 个并矢 \(\{\mathbf e_x\mathbf e_x,\mathbf e_x\mathbf e_y,\dots,\mathbf e_z\mathbf e_z\}\) 构成全体 2 阶张量的一组基。唯一性的证明用 (1.32):若两种表示的差对一切 \(\mathbf u,\mathbf v\) 都有 \(\mathbf u\cdot[\cdots]\mathbf v=0\),依次取 \(\mathbf u,\mathbf v\) 为基向量,即得各系数相等。
和矩阵语言的对应。 (1.46) 就是"矩阵 = 单位矩阵块 \(E_{ij}\) 的线性组合"。更有用的是另一种并矢展开——谱分解 \(\Sigma=\sum_k\lambda_k\mathbf q_k\mathbf q_k\)(第 01 册第 02b 章谱定理),它是 PCA 和统计因子模型的基础。
T1.6 习题中值得掌握的结论
原书第 I 章有 28 道习题,不少把张量概念推进了一步。下面这些结论在后续章节和量化中都会用到:
- 迹(习题 1.23):定义 \(\operatorname{tr}(\mathbf{uv})=\mathbf u\cdot\mathbf v\),再线性延拓,得 \(\operatorname{tr}\mathbf T=T_{xx}+T_{yy}+T_{zz}\)。这个定义不依赖坐标,所以迹是不变量。组合方差 \(\mathbf w\cdot\Sigma\mathbf w=\operatorname{tr}(\Sigma\,\mathbf{ww})\) 就是这么来的。
- 并矢的行列式为零(习题 1.22):\(\mathbf{uv}\) 的秩为 1。样本量少于资产数时,样本协方差 \(\frac1{T-1}\sum_t\mathbf x_t\mathbf x_t\) 是至多 \(T-1\) 个并矢之和,必然奇异。
- 复合与求导(习题 1.24–1.25):\((\mathbf S\cdot\mathbf T)\mathbf v=\mathbf S(\mathbf T\mathbf v)\),\(\mathbf{wx}\cdot\mathbf{yz}=(\mathbf x\cdot\mathbf y)\mathbf{wz}\);依赖参数的张量 \(\dot{\mathbf T}\) 由 \(\dot{\mathbf T}\mathbf a=(\mathbf T\mathbf a)^\cdot\)(\(\mathbf a\) 为常向量)定义,乘积法则 \((\mathbf S\cdot\mathbf T)^\cdot=\mathbf S\cdot\dot{\mathbf T}+\dot{\mathbf S}\cdot\mathbf T\) 成立。
- 逆张量(习题 1.27):非奇异 \(\mathbf T\) 有唯一线性的逆,\((\mathbf T^{-1})^T=(\mathbf T^T)^{-1}\)。
- 正定(习题 1.28):\(\mathbf x\cdot\mathbf T\mathbf x>0\),\(\forall\mathbf x\ne\mathbf 0\)。正定则特征值全正;非奇异 \(\mathbf T\) 使 \(\mathbf T^T\cdot\mathbf T\) 正定。后者对应"设计矩阵 \(X\) 列满秩时 \(X^TX\) 正定,OLS 有唯一解"。
- 主方向(习题 1.20–1.21):应力张量 \(\mathbf T\) 作用于单位法向 \(\bar{\mathbf n}\) 得面上的应力 \(\mathbf t=\mathbf T\bar{\mathbf n}\),分解为法向应力 \(\mathrm{Proj}_{\mathbf n}\mathbf t\) 和剪应力;剪应力为零的方向就是特征向量 \(\mathbf T\mathbf x=\lambda\mathbf x\)。把"应力"换成"协方差",主应力方向就是主成分方向。
- 反对称张量的平方(习题 1.26):\((\boldsymbol\omega\times)^2=\boldsymbol\omega\boldsymbol\omega-(\boldsymbol\omega\cdot\boldsymbol\omega)\mathbf 1\),故 \(|\boldsymbol\omega|^2=-\frac12\operatorname{tr}\mathbf A^2\)。
量化实战
实战 1:用 einsum 验证原书例题
numpy.einsum 的下标字符串就是本章的分量公式:'i,ij,j->' 是 \(u_iT_{ij}v_j\),'i,j->ij' 是并矢 \(u_iv_j\)。先用它把例 1.4、1.5 和对称–反对称分解跑一遍。
import numpy as np
np.set_printoptions(precision=4, suppress=True)
# ---- 1. 原书例 1.4/1.5:张量 = 线性算子,分量 T_ij = e_i . T e_j ----
def T_action(v): # 例 1.4 给出的作用规则
vx, vy, vz = v
return np.array([-2*vx + 3*vz, -vz, vx + 2*vy])
E = np.eye(3)
T = np.column_stack([T_action(E[:, j]) for j in range(3)]) # 第 j 列 = T e_j
print("T 的笛卡尔分量:\n", T)
# T_ij = e_i . T e_j,用 einsum 写成 "i,ij,j->"
print("T_xz =", np.einsum('i,ij,j->', E[:, 0], T, E[:, 2]))
# 转置:u.(T v) = v.(T^T u) 对任意 u, v 成立
rng = np.random.default_rng(0)
u, v = rng.normal(size=3), rng.normal(size=3)
print("u.Tv - v.T^T u =", u @ T @ v - v @ T.T @ u)
print("T^T v (v=(1,2,3)) =", T.T @ np.array([1, 2, 3]), " 例1.4公式:",
np.array([-2*1 + 3, 2*3, 3*1 - 2]))
# ---- 2. 并矢(直积)uv(w) = u (v.w),以及任意张量 = 9 个并矢的组合 ----
uv = np.einsum('i,j->ij', u, v) # 外积
w = rng.normal(size=3)
print("uv(w) - u(v.w) =", np.abs(uv @ w - u * (v @ w)).max())
recon = sum(T[i, j] * np.einsum('i,j->ij', E[i], E[j]) for i in range(3) for j in range(3))
print("sum T_ij e_i e_j == T:", np.allclose(recon, T))
# ---- 3. 对称–反对称分解与轴向量(习题 1.17/1.18)----
S, A = (T + T.T) / 2, (T - T.T) / 2
omega = np.array([A[2, 1], A[0, 2], A[1, 0]]) # A v = omega x v
print("S =\n", S, "\nA =\n", A, "\n轴向量 omega =", omega)
print("A v == omega x v:", np.allclose(A @ v, np.cross(omega, v)))
关键输出(-0. 是浮点负零,等于 0):
T 的笛卡尔分量:
[[-2. 0. 3.]
[-0. -0. -1.]
[ 1. 2. 0.]]
T_xz = 3.0
u.Tv - v.T^T u = 1.1102230246251565e-16
T^T v (v=(1,2,3)) = [1. 6. 1.] 例1.4公式: [1 6 1]
uv(w) - u(v.w) = 1.3877787807814457e-17
sum T_ij e_i e_j == T: True
S =
[[-2. 0. 2. ]
[ 0. -0. 0.5]
[ 2. 0.5 0. ]]
A =
[[ 0. 0. 1. ]
[-0. 0. -1.5]
[-1. 1.5 0. ]]
轴向量 omega = [ 1.5 1. -0. ]
A v == omega x v: True
这里顺便得到了习题 1.17 的答案:例 1.4 张量的反对称部分的轴向量是 \(\boldsymbol\omega\sim(3/2,1,0)\)。
实战 2:协方差是对称张量,中性化是投影
本章概念在量化里最直接的落点有四个:
- 协方差矩阵是去均值收益并矢的平均:\(\Sigma=\frac1{T-1}\sum_t(\mathbf r_t-\boldsymbol\mu)(\mathbf r_t-\boldsymbol\mu)\)。它是对称 2 阶张量,"把权重映到边际风险"\(\Sigma\mathbf w\)。
- 组合方差是二次型 \(\mathbf w\cdot\Sigma\mathbf w\),只依赖 \(\Sigma\) 的对称部分。
- 对单个暴露向量中性化就是作用残差算子 \(\mathbf 1-\bar{\mathbf b}\bar{\mathbf b}\)。多因子情形推广为 \(\mathbf 1-B(B^TB)^{-1}B^T\),它的几何含义在第 T2 章用倒易基解释。
- 方差是几何不变量:换一组正交的"资产坐标轴"(例如改用若干正交组合作为交易单元),权重分量和协方差分量都变,方差不变。
import numpy as np
np.set_printoptions(precision=4, suppress=True)
rng = np.random.default_rng(42)
# 模拟 T=500 天、N=5 只股票的日收益:单因子结构 r = beta * m + eps
T_, N = 500, 5
beta = np.array([0.8, 1.0, 1.2, 0.5, 1.5])
m = rng.normal(0.0004, 0.01, T_)
R = np.outer(m, beta) + rng.normal(0, 0.015, (T_, N)) # T x N
# (1) 协方差 = 去均值收益“并矢”的平均:Sigma = mean_t (r_t - mu)(r_t - mu)
X = R - R.mean(axis=0)
Sigma = np.einsum('ti,tj->ij', X, X) / (T_ - 1)
print("与 np.cov 一致:", np.allclose(Sigma, np.cov(R, rowvar=False)))
# (2) 组合方差 = 二次型 w . Sigma w;对称张量只有对称部分进入二次型
w = np.array([0.3, 0.2, 0.2, 0.2, 0.1])
print("组合年化波动:", np.sqrt(np.einsum('i,ij,j->', w, Sigma, w) * 252))
K = rng.normal(size=(N, N)) # 任意非对称矩阵
print("w.Kw == w.sym(K)w:", np.isclose(w @ K @ w, w @ ((K + K.T) / 2) @ w))
# (3) 投影张量 P = bb/|b|^2,残差算子 1 - P:做“对 beta 中性化”
# 注意:这是对截面向量(N 维)的投影,不是时间序列回归
b_hat = beta / np.linalg.norm(beta)
P = np.einsum('i,j->ij', b_hat, b_hat)
w_neutral = (np.eye(N) - P) @ w
print("中性化前 beta 暴露:", w @ beta, " 中性化后:", round(w_neutral @ beta, 12))
print("P 幂等 P.P == P:", np.allclose(P @ P, P), " 秩:", np.linalg.matrix_rank(P))
# (4) 几何不变量:把“资产坐标轴”做正交旋转 Q,分量变了,内积不变
Q, _ = np.linalg.qr(rng.normal(size=(N, N)))
w_new, Sigma_new = Q.T @ w, Q.T @ Sigma @ Q # 新坐标下的分量
print("旋转后权重分量:", w_new)
print("方差不变:", np.isclose(w @ Sigma @ w, w_new @ Sigma_new @ w_new))
关键输出:
与 np.cov 一致: True
组合年化波动: 0.18578721702616996
w.Kw == w.sym(K)w: True
中性化前 beta 暴露: 0.93 中性化后: 0.0
P 幂等 P.P == P: True 秩: 1
旋转后权重分量: [-0.2107 -0.4162 -0.0089 0.0385 -0.0282]
方差不变: True
两点说明。第一,投影中性化会改变权重之和(这里不再满足满仓约束),实际组合构建中通常把"预算约束"和"中性约束"一起放进优化问题,而不是简单投影;投影的价值在于给出"剔除某方向暴露"的最小改动(欧氏距离意义下)。第二,(4) 里只用了正交旋转。对于非正交的换基,例如用"市场组合 + 行业多空组合"代替单只股票,分量的变换规律会分成两种(\(Q^T\) 与 \(Q^{-1}\) 不再相同),这正是下一章的主题。
本章小结
本章确立了全书的基本观点:向量和张量是几何对象,坐标分量只是它们在某组基下的表示;用长度定义的点积、用面积和体积定义的叉积与三重积,都是不依赖坐标的几何不变量。2 阶张量被定义为把向量映成向量的线性算子,并矢 \(\mathbf{uv}(\mathbf w)=\mathbf u(\mathbf v\cdot\mathbf w)\) 是最基本的张量,任何张量都是 9 个基并矢的线性组合,系数 \(T_{ij}=\mathbf e_i\cdot\mathbf T\mathbf e_j\) 就是熟悉的矩阵。转置由 \(\mathbf u\cdot\mathbf T\mathbf v=\mathbf v\cdot\mathbf T^T\mathbf u\) 定义,任意张量可分解为对称部分与反对称部分。对量化读者,本章最有用的是三件事:协方差是对称张量、组合方差是二次型、因子中性化是投影。
| 概念 | 公式 | 量化对应 |
|---|---|---|
| 点积(无角度定义) | \(\mathbf u\cdot\mathbf v=\frac12(\lvert\mathbf u\rvert^2+\lvert\mathbf v\rvert^2-\lvert\mathbf v-\mathbf u\rvert^2)\) | 极化恒等式:由方差反推协方差 |
| 笛卡尔分量 | \(\mathbf u\cdot\mathbf v=u_xv_x+u_yv_y+u_zv_z\) | u @ v,einsum('i,i->',u,v) |
| 三重积 | \((\mathbf u\times\mathbf v)\cdot\mathbf w=\det[\mathbf u;\mathbf v;\mathbf w]\) | 行列式 = 有向体积,广义方差 |
| 向量三重积 | \((\mathbf u\times\mathbf v)\times\mathbf w=(\mathbf u\cdot\mathbf w)\mathbf v-(\mathbf v\cdot\mathbf w)\mathbf u\) | (三维专属) |
| 并矢 | \(\mathbf{uv}(\mathbf w)=\mathbf u(\mathbf v\cdot\mathbf w)\) | 外积 einsum('i,j->ij'),协方差的构件 |
| 投影 | \(\mathrm{Proj}_{\mathbf u}=\bar{\mathbf u}\bar{\mathbf u}\) | 单因子中性化 \((\mathbf 1-\bar{\mathbf b}\bar{\mathbf b})\mathbf w\) |
| 转置 | \(\mathbf u\cdot\mathbf T\mathbf v=\mathbf v\cdot\mathbf T^T\mathbf u\) | 斜基下不是简单的矩阵转置 |
| 对称–反对称分解 | \(\mathbf T=\frac12(\mathbf T+\mathbf T^T)+\frac12(\mathbf T-\mathbf T^T)\) | 二次型只依赖对称部分 |
| 笛卡尔分量 | \(T_{ij}=\mathbf e_i\cdot\mathbf T\mathbf e_j\),\(\mathbf T=\sum T_{ij}\mathbf e_i\mathbf e_j\) | einsum('i,ij,j->') |
| 迹 | \(\operatorname{tr}(\mathbf{uv})=\mathbf u\cdot\mathbf v\) | \(\mathbf w\cdot\Sigma\mathbf w=\operatorname{tr}(\Sigma\,\mathbf{ww})\) |
| 正定 | \(\mathbf x\cdot\mathbf T\mathbf x>0\) | 协方差可逆、均值–方差解唯一 |
练习
基础
- \(\mathbf u\sim(2,-3,4)\),\(\mathbf v\sim(1,0,1)\)。求 \(\mathbf u\cdot\mathbf v\)、夹角、\(\mathrm{Proj}_{\mathbf v}\mathbf u\) 和 \(\mathrm{Proj}_{\mathbf u}\mathbf v\)。(原书习题 1.4–1.5) 答案要点:\(\mathbf u\cdot\mathbf v=6\);\(|\mathbf u|=\sqrt{29}\),\(|\mathbf v|=\sqrt2\),\(\cos\theta=6/\sqrt{58}\),\(\theta\approx38.0^\circ\);\(\mathrm{Proj}_{\mathbf v}\mathbf u\sim(3,0,3)\);\(\mathrm{Proj}_{\mathbf u}\mathbf v=\frac6{29}(2,-3,4)\)。
- 用极化恒等式:两只股票日收益波动率分别为 2% 和 3%,价差 \(X-Y\) 的波动率为 2.5%,求相关系数。 答案要点:\(\operatorname{Cov}=\frac12(4+9-6.25)=3.375\)(单位 \(\%^2\)),\(\rho=3.375/6=0.5625\)。
- 证明 \((\mathbf{uv})^T=\mathbf{vu}\),并由此说明 \(\mathbf{uu}\) 对称。(原书习题 1.13) 提示:\(\mathbf a\cdot\mathbf{uv}(\mathbf b)=(\mathbf a\cdot\mathbf u)(\mathbf v\cdot\mathbf b)=\mathbf b\cdot\mathbf{vu}(\mathbf a)\)。
- 证明 \(\mathbf{uv}\) 的分量矩阵行列式为零,并说明为什么 \(T<N\) 时样本协方差矩阵奇异。(原书习题 1.22) 提示:分量矩阵每列都是 \(\mathbf u\) 的倍数;去均值后 \(T\) 个向量之和为零,样本协方差是至多 \(T-1\) 个秩一矩阵之和。
- 对例 1.4 的 \(\mathbf T\) 求 \(\operatorname{tr}\mathbf T\)、对称部分的特征值,并验证 \(\mathbf v\cdot\mathbf A\mathbf v=0\)。
答案要点:\(\operatorname{tr}\mathbf T=-2\);对称部分 \(S\) 见实战 1 输出,其特征值可用
np.linalg.eigvalsh(S)求得,之和等于 \(-2\)。
进阶
- 只用定义 (1.11) 证明点积分配律。(原书习题 1.7) 提示:用平行四边形定律 \(2|\mathbf a|^2+2|\mathbf b|^2=|\mathbf a+\mathbf b|^2+|\mathbf a-\mathbf b|^2\),并写 \(\mathbf v+\mathbf w-\mathbf u=(\mathbf v-\frac12\mathbf u)+(\mathbf w-\frac12\mathbf u)\)。
- 用"二次多项式 \(p(x)=\operatorname{Var}(X+xY)\ge0\)"的判别式证明 \(|\rho_{XY}|\le1\),并指出等号成立的条件。(对应原书习题 1.8 的第二种证法) 答案要点:判别式 \(4\operatorname{Cov}^2-4\operatorname{Var}X\operatorname{Var}Y\le0\);等号当且仅当 \(X+xY\) 几乎处处为常数,即两者线性相关。
- 不用分量解方程 \(\mathbf x+\mathbf a\times\mathbf x=\mathbf b\)。(原书习题 1.9) 答案要点:\(\mathbf x=\dfrac{\mathbf b+(\mathbf a\cdot\mathbf b)\mathbf a+\mathbf b\times\mathbf a}{1+\mathbf a\cdot\mathbf a}\)。设 \(\mathbf x=A\mathbf a+B\mathbf b+C\mathbf a\times\mathbf b\) 代入比较系数。
- 设 \(\mathbf T\) 非奇异。证明 \(\mathbf T^T\cdot\mathbf T\) 正定,并把它翻译成关于 OLS 设计矩阵的命题。(原书习题 1.28) 提示:\(\mathbf x\cdot\mathbf T^T\mathbf T\mathbf x=|\mathbf T\mathbf x|^2>0\)。设计矩阵列满秩时 \(X^TX\) 正定。
- 编程:随机生成 \(3\times3\) 矩阵 \(T\),用
einsum验证 \(\operatorname{tr}(\mathbf{uv})=\mathbf u\cdot\mathbf v\) 和 \(\mathbf w\cdot T\mathbf w=\operatorname{tr}(T\,\mathbf{ww})\)。 提示:np.einsum('ii->', np.outer(u, v))、np.einsum('ij,ji->', T, np.outer(w, w))。
原书推荐习题
- 1.7:不用坐标证明分配律,训练"不变定义 → 性质"的思维。
- 1.8:Schwarz 不等式三种证法及积分版本,对应相关系数 \(|\rho|\le1\)。
- 1.13、1.22、1.23:并矢转置、秩一矩阵行列式为零、迹的不变定义。
- 1.17、1.18:对称/反对称分解与轴向量。
- 1.20–1.21:应力张量的法向/剪切分解与主方向(特征值问题,类比 PCA)。
- 1.27–1.28:逆张量与正定性。
原书对照
| 本章小节 | 原书小节 | 书页 | PDF 页 |
|---|---|---|---|
| 本篇定位 | 第二版序、第一版序 | 前置页 | 8–11 |
| T1.1 向量:箭头的等价类 | 1.1–1.5 Euclidean Space; Directed Line Segments; Addition; Multiplication; Things That Vectors May Represent | 3–6 | 16–19 |
| T1.1.3(续) | 1.9 The Interpretation of Vector Addition | 10–11 | 23–24 |
| T1.2 笛卡尔坐标与点积 | 1.6 Cartesian Coordinates; 1.7 The Dot Product; 1.8 Cartesian Base Vectors | 6–10 | 19–23 |
| T1.3 叉积与三重积 | 1.10 The Cross Product | 11–15 | 24–28 |
| T1.4 张量:线性算子 | 1.11 Alternative Interpretation… Tensors; 1.12 Definitions | 15–17 | 28–30 |
| T1.5 笛卡尔分量 | 1.13 Cartesian Components; 1.14 Cartesian Basis for Second Order Tensors | 17–19 | 30–32 |
| T1.6 习题中的结论 | 1.15 Exercises(共 28 题) | 20–24 | 33–37 |
页码换算:第 I–III 章原书第 \(p\) 页 = PDF 第 \(p+13\) 页。