跳到正文

向量与矩阵

向量是一列数字;矩阵是一张数字表格。线性代数是多因子模型、投资组合优化和机器学习的语言。

第 4 篇 · 共 6 篇 约 3 分钟

向量:有序的数字列表

向量是量化金融中最简单的数据结构。它是有序的数字集合——仅此而已。

想象一个包含五只资产的投资组合。预期收益率向量(以每月百分比表示)可能如下:

r=[2.11.43.20.81.9]\mathbf{r} = \begin{bmatrix} 2.1 \\ 1.4 \\ 3.2 \\ 0.8 \\ 1.9 \end{bmatrix}

每个条目对应一只资产。顺序很重要——资产 3 的预期收益率是 3.2,而非 0.8。

几何视角

向量也有几何生命。二维向量如 v=[3,4]\mathbf{v} = [3, 4] 可以画成一条从原点出发、终点在坐标平面 (3, 4) 点的箭头。向量的范数(或长度)是从原点到其尖端的距离:

∥v∥=v12+v22+⋯+vn2\|\mathbf{v}\| = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}

对于 v=[3,4]\mathbf{v} = [3, 4],范数为 9+16=5\sqrt{9 + 16} = 5。这就是毕达哥拉斯定理的应用。

在一个包含 500 个资产的投资组合中,每个资产都有自己的维度。你在一个 500 维空间中工作,这无法可视化,但代数保持不变。

向量运算

向量支持三种基本运算。

加法将对应条目相加:[1,2]+[3,4]=[4,6][1, 2] + [3, 4] = [4, 6]。

标量乘法将每个条目乘以一个常数:2×[1,2]=[2,4]2 \times [1, 2] = [2, 4]。

点积(内积)将向量按条目相乘后求和:

v⋅w=∑i=1nviwi\mathbf{v} \cdot \mathbf{w} = \sum_{i=1}^{n} v_i w_i

v=[1,2,3]\mathbf{v} = [1, 2, 3] 和 w=[4,5,6]\mathbf{w} = [4, 5, 6] 的点积为 1×4+2×5+3×6=321 \times 4 + 2 \times 5 + 3 \times 6 = 32。

点积引出了最有用的概念之一:正交性。当两个向量的点积为零时,它们是正交的。几何上,它们相互垂直——指向完全独立的方向。在统计中,当你想确认一个变量提供了另一个变量无法提供的独立信息时,这很重要。

矩阵:转换数据的表格

矩阵是一个由行和列组成的矩形数字表格。如果向量是单列数据,矩阵就是并排的多列。

具有 mm 行和 nn 列的矩阵称为 m×nm \times n 矩阵。第 ii 行第 jj 列的条目写作 aija_{ij}。

量化金融中经常出现两种矩阵:

收益率矩阵 R\mathbf{R},大小为 T×nT \times n,包含 nn 个资产在 TT 个时期的收益率。第 tt 行包含所有资产在第 tt 天的收益率;第 jj 列包含资产 jj 在所有天的收益率。

协方差矩阵 Σ\mathbf{\Sigma},大小为 n×nn \times n,对角线上是每个资产的方差,对角线外是每对资产之间的协方差。它总是对称的——Σij=Σji\Sigma_{ij} = \Sigma_{ji}——因为协方差是对称的。

转置

转置运算交换行和列。如果 A\mathbf{A} 是 m×nm \times n,则 A⊤\mathbf{A}^\top 是 n×mn \times m。第一行变成第一列。

[A⊤]ij=aji[\mathbf{A}^\top]_{ij} = a_{ji}

在 Python 中使用 NumPy:

import numpy as np


A = np.array([[1, 4],
              [2, 5],
              [3, 6]])

print(A.shape)  # (3, 2)
print(A.T.shape)  # (2, 3)

提示词

用 numpy 写一个 3×2 矩阵,用 .shape 和 .T.shape 演示转置。

矩阵运算

矩阵像向量一样按条目进行加法和标量乘法。有趣的运算是矩阵乘法,它将两个矩阵组合起来。

要将 A\mathbf{A}(大小 m×nm \times n)乘以 B\mathbf{B}(大小 n×pn \times p),你计算每个条目 (i,j)(i,j) 作为 A\mathbf{A} 的第 ii 行与 B\mathbf{B} 的第 jj 列的点积:

(AB)ij=∑k=1naikbkj(\mathbf{A}\mathbf{B})_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}

结果矩阵的大小为 m×pm \times p。注意内维度必须匹配——A\mathbf{A} 的列数必须等于 B\mathbf{B} 的行数。

import numpy as np

A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])

# 矩阵乘法
C = A @ B  # 或 np.matmul(A, B)
print(C)
# [[19 22]
#  [43 50]]

提示词

用 numpy 演示两个 2×2 矩阵相乘,打印结果矩阵。

点积作为矩阵乘法

一个关键洞察:两个向量的点积与行向量乘以列向量是相同的。这是投资组合收益率计算的基础。

给定权重向量 w\mathbf{w}(每个资产中的资本比例)和收益率向量 r\mathbf{r}:

rp=w⊤r=∑i=1nwirir_p = \mathbf{w}^\top \mathbf{r} = \sum_{i=1}^{n} w_i r_i

投资组合收益率是单个资产收益率的加权和——一个简单的点积。

import numpy as np

# 五只资产:预期月收益率
expected_returns = np.array([2.1, 1.4, 3.2, 0.8, 1.9])  # 百分比

# 投资组合权重(必须总和为 1)
weights = np.array([0.30, 0.20, 0.25, 0.10, 0.15])

# 投资组合收益率 = 权重与收益率的点积
portfolio_return = weights @ expected_returns
print(f"预期投资组合收益率: {portfolio_return:.2f}%")

提示词

用 numpy 演示点积计算组合收益率:权重向量乘预期收益率向量。

这个简单运算——一个点积——是投资组合收益率计算的核心。每当你看到一个投资组合的预期收益率时,某个地方就是一个权重向量正在与收益率向量做点积。

参考文献

Strang, Introduction to Linear Algebra, 5th edition, Wellesley-Cambridge Press, Chapters 1–2. ISBN: 978-0980232776.

Lax, Linear Algebra and Its Applications, 2nd edition, Wiley, Chapter 1. ISBN: 978-0471751564.