内容提要
本文介绍Python线性代数基础,包括标量、向量、矩阵和张量的定义与表示,张量的形状与维度,逐元素运算、Hadamard积和广播机制;归约操作如求和、均值、非降维求和、累积和;点积、矩阵-向量积、矩阵乘法;以及L1、L2和Frobenius范数及其代码实现。
延伸解读
理解张量的形状与维度
文章强调,张量的形状(shape)是一个元组,列出每个轴的长度;而维度(dimensionality)指轴的数量。例如,向量是一维张量,矩阵是二维张量。在代码中,.shape 返回形状,len(x) 返回长度。这有助于避免混淆:向量的长度是其元素个数,而矩阵的形状包含行数和列数。正确理解这些概念是进行后续运算的基础。
归约操作中的轴与keepdims
归约操作如求和、求均值可以沿指定轴进行。默认情况下,sum() 会归约所有轴得到标量。若指定 axis=0,则沿行方向求和,结果形状会减少一维。使用 keepdims=True 可以保持轴数不变,便于后续广播运算。例如,将矩阵每行除以该行和时,需保持形状为 (n,1) 才能正确广播。累积和 cumsum 则保留形状,计算沿轴的累积值。
点积与矩阵乘法的实际意义
点积是元素乘积之和,可用于计算加权和。当权重非负且和为1时,点积表示加权平均;归一化后点积表示余弦相似度。矩阵-向量积可视为将向量从 R^n 变换到 R^m,例如旋转。矩阵乘法可看作多个矩阵-向量积的拼接,要求左矩阵列数等于右矩阵行数。这些运算在神经网络中用于描述层间计算。
范数:衡量向量或矩阵的大小
范数将向量映射为非负标量,满足齐次性、三角不等式和正定性。L2 范数是元素平方和的平方根,对应欧氏距离;L1 范数是元素绝对值之和,对异常值更稳健。矩阵的 Frobenius 范数是元素平方和的平方根,类似矩阵形状向量的 L2 范数。在代码中,可用 torch.norm() 计算 L2 和 Frobenius 范数,用 torch.abs().sum() 计算 L1 范数。
Q&A
Python中如何表示标量、向量、矩阵和张量?
标量用只有一个元素的张量表示;向量用一维张量表示;矩阵用二维张量表示;张量是任意维度的数组,用大写特殊字体表示。
张量的形状和维度有什么区别?
形状是一个元组,列出张量每个轴的长度;维度指张量的轴数。例如,向量是一维张量,矩阵是二维张量。
什么是Hadamard积?在Python中如何计算?
Hadamard积是两个矩阵的逐元素乘积,数学符号为⊙。在PyTorch中,可以使用A * B计算。
归约操作如求和和均值在张量中如何实现?
使用sum()计算元素和,mean()计算均值。可以指定axis参数沿特定轴归约,使用keepdims=True保持维度,cumsum()计算累积和。
点积和矩阵乘法有什么区别?
点积是两个向量的对应元素乘积之和,结果是一个标量;矩阵乘法是两个矩阵的行与列的点积,结果是一个矩阵。矩阵乘法不是逐元素乘法。
L1、L2和Frobenius范数分别是什么?如何用代码计算?
L1范数是向量元素绝对值之和;L2范数是元素平方和的平方根;Frobenius范数是矩阵元素平方和的平方根。在PyTorch中,L2范数用torch.norm(u),L1范数用torch.abs(u).sum(),Frobenius范数用torch.norm(matrix)。