
获得徽章 8
@ 早在电子邮件发明之前就出现在机械打字机的键盘上了。而 @ 会被安排进键盘布局说明,在打字机发明之前,它就已经有了广泛的应用。
图中发明于 1895 年的福特打字机(与福特汽车公司无关),是最早一批带有 @ 键(左下角)的打字机之一。
如果我们追溯 @ 的历史,会发现它的故事比我们想象的还要古老。早在 15 ~ 16 世纪, @ 就已经在商业活动中登场,常用于表示重量或体积单位,比如“一个标准的瓶子能装多少酒”、“一个标准的袋子里有多少面粉”这种标准化的度量方式。这也正是为什么, @ 在 Unicode 编码中的正式名称是 **commercial at**——“商业用的 at”。
图中发明于 1895 年的福特打字机(与福特汽车公司无关),是最早一批带有 @ 键(左下角)的打字机之一。
如果我们追溯 @ 的历史,会发现它的故事比我们想象的还要古老。早在 15 ~ 16 世纪, @ 就已经在商业活动中登场,常用于表示重量或体积单位,比如“一个标准的瓶子能装多少酒”、“一个标准的袋子里有多少面粉”这种标准化的度量方式。这也正是为什么, @ 在 Unicode 编码中的正式名称是 **commercial at**——“商业用的 at”。
展开
1
1
# Python为什么要特意引入@来做矩阵乘法呢?
Python 从 3.5 开始,引入了 @ 符号来表示矩阵乘法,这是通过 PEP 465 号提案正式确立的。
首先,`A @ B`更贴近数学表达。在数学上,矩阵乘法通常写作 A⋅B(乘号⋅通常省略),而不是写成 `dot(A, B)` 或 `A.matmul(B)` 这种函数调用形式。若写作 `A @ B`,代码就跟数学算式几乎一模一样了,写起来更顺手,看起来也更直观,有助于提升代码的可读性和可维护性。
其次,使用 `@` 可以避免歧义。在数值计算里,以矩阵为对象的乘法不止一种,比如按元素乘(也叫阿达玛乘积)和普通的矩阵乘法。如果全都用 `*` 来表示,容易搞混。特别是在 NumPy 里,不同类型的对象,如 `numpy.ndarray` 和 `numpy.matrix`,对 `*` 的解释还不一样,很容易出错。
PEP 465 号提案中还提到了选择 @ 而不是其他符号表示矩阵乘法的一些理由:
* 各种键盘布局中都有 @ 符号,可以轻松输入
* @ 看起来像个小漩涡,能使人联想到矩阵乘法中行与列交错扫描的运算过程
* @ 符号的不对称性暗示了矩阵乘法不满足交换律
* ……
Python 从 3.5 开始,引入了 @ 符号来表示矩阵乘法,这是通过 PEP 465 号提案正式确立的。
首先,`A @ B`更贴近数学表达。在数学上,矩阵乘法通常写作 A⋅B(乘号⋅通常省略),而不是写成 `dot(A, B)` 或 `A.matmul(B)` 这种函数调用形式。若写作 `A @ B`,代码就跟数学算式几乎一模一样了,写起来更顺手,看起来也更直观,有助于提升代码的可读性和可维护性。
其次,使用 `@` 可以避免歧义。在数值计算里,以矩阵为对象的乘法不止一种,比如按元素乘(也叫阿达玛乘积)和普通的矩阵乘法。如果全都用 `*` 来表示,容易搞混。特别是在 NumPy 里,不同类型的对象,如 `numpy.ndarray` 和 `numpy.matrix`,对 `*` 的解释还不一样,很容易出错。
PEP 465 号提案中还提到了选择 @ 而不是其他符号表示矩阵乘法的一些理由:
* 各种键盘布局中都有 @ 符号,可以轻松输入
* @ 看起来像个小漩涡,能使人联想到矩阵乘法中行与列交错扫描的运算过程
* @ 符号的不对称性暗示了矩阵乘法不满足交换律
* ……
展开
评论
点赞