获得徽章 8
- @ 早在电子邮件发明之前就出现在机械打字机的键盘上了。而 @ 会被安排进键盘布局说明,在打字机发明之前,它就已经有了广泛的应用。
图中发明于 1895 年的福特打字机(与福特汽车公司无关),是最早一批带有 @ 键(左下角)的打字机之一。
如果我们追溯 @ 的历史,会发现它的故事比我们想象的还要古老。早在 15 ~ 16 世纪, @ 就已经在商业活动中登场,常用于表示重量或体积单位,比如“一个标准的瓶子能装多少酒”、“一个标准的袋子里有多少面粉”这种标准化的度量方式。这也正是为什么, @ 在 Unicode 编码中的正式名称是 **commercial at**——“商业用的 at”。展开赞过11 - # 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 号提案中还提到了选择 @ 而不是其他符号表示矩阵乘法的一些理由:
* 各种键盘布局中都有 @ 符号,可以轻松输入
* @ 看起来像个小漩涡,能使人联想到矩阵乘法中行与列交错扫描的运算过程
* @ 符号的不对称性暗示了矩阵乘法不满足交换律
* ……展开评论点赞 - “宏绘画”,来自项目 sl——Cure your bad habit of mistyping(
github.com)。为啥 #define 这个叫“宏 macro“来着?小小的标识符能展开成”宏大“的代码片段?
评论点赞
![[白眼的狗]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_98.9f6d4ad.png)
![[咖啡]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
![[惊讶]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_68.1e326db.png)