Tensor Tensor

本文从物理学和数学角度深入浅出地介绍了张量的概念及其重要性。在物理学中,张量是一种描述物理系统内在属性的方式,它能够确保物理定律在不同参考系间保持一致。在数学上,张量被抽象为线性变换,它不依赖于具体坐标系的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TensorFlow作为深度学习的重要开源库,学习之前最想弄清楚这个名字是怎么来的,百度了很多,对Tensor认识了,下面进行详细介绍。 
Tensor中文翻译为张量,一上来给人的感觉就类似于“向量”,“矢量”之类的,下面从物理和数学两个方面对Tensor进行解释。

物理学

张量的概念早在19世纪末就被数学家提出了, 但这个概念真正发扬光大, 还是在相对论出现以后. 原因是, 在相对论中, 在不同的参考系下看同一个物理系统, 它"看起来"是不一样的: 比如粒子的动量和能量在不同的参考系下根据 Lorentz 变换相联系.

这带来一个问题: 在 Bob 看来, 一个粒子的能动量是(E_b,\bm{p}_b). 如果你问 Bob, 这个粒子的能动量是多少, 他会告诉你是(E_b,\bm{p}_b). 但我 (Andrew) 听了以后, 必然是反对的: Bob 说的不对! 我看到的粒子的能动量明明是(E_a,\bm{p}_a)!

我们知道, Andrew 和 Bob 都没有说错. (E_a,\bm{p}_a)(E_b,\bm{p}_b)可以通过恰当的 Lorentz 变换相互转化. "你说的我都懂", 想必你已经看得不耐烦了, "可是这个粒子的能动量究竟是多少? " 由于参考系都是平权的, Andrew 和 Bob 的参考系并没有哪个更优越. 那我们干脆把它们都舍弃. 于是我们说, 这个粒子的能动量就由能动量张量T来描述. 能动量张量是一个不随坐标而改变的, 物理系统内在的量. (如果你对左边这句话的确切含义感到疑惑, 请先往下看. ) 它在 Andrew 的坐标系里看是(E_a,\bm{p}_a), 在 Bob 的坐标系里看是(E_b,\bm{p}_b), (E_a,\bm{p}_a)按照 Lorentz 变换变成(E_b,\bm{p}_b).

你现在肯定找到了一点感觉. 什么是张量? 如 A.Zee 书中所说: A tensor is something that transforms like a tensor! 一个量, 在不同的参考系下按照某种特定的法则进行变换, 就是张量.

用张量有什么好处? 物理定律是不会随参考系的变化而变化的. 考虑下面一个物理过程: 两个粒子1和2经过散射变成了3和4. 在 Andrew 看来, 能动量守恒是(E_{a,1},\bm{p}_{a,1})+(E_{a,2},\bm{p}_{a,2})=(E_{a,3},\bm{p}_{a,3})+(E_{a,4},\bm{p}_{a,4}). 但这样写, 并不能直接看出 Bob 也看到能动量守恒. 但如果用张量的语言直接写成: T_1+T_2=T_3+T_4, 我们立刻就知道它在 Andrew 看来是(E_{a,1},\bm{p}_{a,1})+(E_{a,2},\bm{p}_{a,2})=(E_{a,3},\bm{p}_{a,3})+(E_{a,4},\bm{p}_{a,4}), 在 Bob 看来是(E_{b,1},\bm{p}_{b,1})+(E_{b,2},\bm{p}_{b,2})=(E_{b,3},\bm{p}_{b,3})+(E_{b,4},\bm{p}_{b,4}). 用张量语言描述的物理定律自动保证了不随参考系变化的这一性质. 而且从记号的角度看, 用张量也更加简洁. [*]

数学

作者:知乎用户
链接:https://www.zhihu.com/question/20695804/answer/43265860
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我们已经从物理上理解了什么是张量. 物理学家到此就很满意了. 但严谨的数学家们并不满意. "你刚刚说张量是一个不随坐标而改变的, 物理系统内在的量", 数学家质问道, "你说的我都懂, 可是张量究竟是什么?"

如果你对线性代数略知一二, 可能知道线性变换这个概念. 线性变换这个概念的精髓之处在于, 它不依赖于线性空间的基的选取. 在某一组基下, 它的矩阵表示A是一个模样; 在另外一组基下, 它的矩阵表示A'=TAT^{-1}是另一个模样, 其中T是基变换矩阵. 有一种常见的说法: 矩阵的意义是线性变换, 相似矩阵是同一个线性变换在不同的基下的表示.

慢着! "同一个线性变换在不同的基下的表示", 这难道不就是和之前说的张量是一回事嘛! Lorentz 变换就是 Minkowski 空间中的基变换, 能动量张量实质上就是一个线性变换. Andrew 和 Bob 看到的能动量张量, 不就是这个线性变换在不同的基下的表示吗?

你现在肯定找到了一点感觉. 什么是张量? 在数学家眼中, 张量已经被抽象成了线性变换.

当然, 数学家们还可以再进一步抽象这个概念, 提取出更普遍的 universal property. 这时, 张量被定义为张量积空间中的一个元素. 具体的定义不在此赘述, 请参考相关专著. 但尽管已经抽象到那样的程度, 其背后的思想依然是不变的.

如果你通过上面的阅读理解了张量背后的思想, 再去看相关数学或物理专著上或繁杂或抽象的式子, 或许会开朗很多 :-)


最后引用陈维桓先生的《微分流形初步》一书中的一段话进行总结:
张量的概念是 G.Ricci 在19世纪末提出的. G.Ricci 研究张量的目的是为几何性质和物理规律的表达寻求一种在坐标变换下不变的形式. 他所考虑的张量是如同向量的分量那样的数组, 要求它们在坐标变换下服从某种线性变换的规律. 近代的理论已经把张量叙述成向量空间及其对偶空间上的多重线性函数, 但是用分量表示张量仍有它的重要性, 尤其是涉及张量的计算时更是如此.

如果还定义了内积/缩并等运算, 还可以由张量迅速得到一些不变量. 此时会涉及对偶空间(因为内积本质是个线性函数)等概念, 进而涉及张量的协变和逆变. 为了行文简洁, 我在正文中没有提及这些概念. 但它们本质上和正文所说没有区别.

### 关于 Tensor 切片操作 在 PyTorch 中,`Tensor` 支持类似于 NumPy 数组的切片操作。通过索引和切片语法可以方便地访问 `Tensor` 的特定部分。以下是关于如何实现 `Tensor` 切片的具体说明: #### 基本切片语法 对于一个多维 `Tensor`,可以通过方括号 `[ ]` 来指定各个维度上的范围或具体位置。例如,假设有一个三维张量 `tensor`,其形状为 `(d1, d2, d3)`,那么可以通过以下方式对其进行切片: - 单一维度切片:`tensor[start:end:step]` - 多维度切片:`tensor[dim1_start:dim1_end, dim2_start:dim2_end, ...]` 其中,`start` 表示起始索引(包含),`end` 表示结束索引(不包含),而 `step` 表示步长,默认值为 1。 #### 示例代码 下面展示了一些常见的 `Tensor` 切片操作实例: ```python import torch # 创建一个二维 Tensor tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 获取第 0 行的所有元素 row_0 = tensor[0, :] # 获取第 1 列的所有元素 column_1 = tensor[:, 1] # 获取子矩阵 (取前两行,后两列) sub_tensor = tensor[:2, 1:] print("Row 0:", row_0) # 输出: Row 0: tensor([1, 2, 3]) print("Column 1:", column_1) # 输出: Column 1: tensor([2, 5, 8]) print("Sub-tensor:\n", sub_tensor) ``` 上述代码展示了如何获取单行、单列以及子矩阵的操作[^5]。 #### 高级切片功能 除了简单的切片外,还可以利用布尔掩码或者高级索引来完成更加复杂的筛选任务。比如,基于条件过滤某些元素: ```python # 使用布尔掩码提取大于等于 5 的元素 mask = tensor >= 5 filtered_elements = tensor[mask] print("Filtered Elements:", filtered_elements) # 输出符合条件的元素集合 ``` 这里创建了一个布尔型 `Tensor` (`mask`) 并将其应用于原始 `Tensor` 上以选出满足条件的部分。 #### 结合其他函数使用 有时可能还需要与其他函数配合来达到目的,像堆叠多个张量时可考虑 `torch.stack()` 函数[^2];如果涉及分布式环境下的全局视角编程,则需注意 Global Tensor 的概念及其应用情境[^3]。 综上所述,在实际开发过程中灵活运用这些技巧能够极大地提高处理数据效率并简化程序逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值