作为一个有计算机科学背景的人,第一次遇到数学人坚持张量不是矩阵时,我感到非常困惑。因为它们显然都是多维数组。但后来我意识到……数学家们在脑海中总是使用强类型语言!
对于计算机科学家来说,结构、函数、接口和约束都是清晰分离且可互换的。张量是你将矩阵视为张量的方式。你可以将它们混合,类是所有四者的集合,但这并不是必需的。
当他们告诉你向量不是数字列表时,这是因为他们已经训练自己成为急切求值的强类型逻辑语言的类型检查器。数学家在他们的脑海中运行着一种基本上是魔法的学习类型检查器。
计算机科学的人大多在脑中运行 Lisp 和/或 C,这取决于我们想要成为解释器还是计算机。如果我们确实运行一个强类型的心理模拟器,它是建立在其之上的。即使是 Haskell 也将类型声明与实现分开。
但是数学仅仅依靠类型签名来完成!他们用强类型宏做所有事情!这就像是 Hindley–Milner 类型的极限情况,如果进行推测性扩展以寻找更好的压缩。这使得数学家能够抽象地对程序进行优化编译。
现在我在做更多的实际数学时,我看到了这种方法的力量。但我认为数学界对计算机科学方法的力量并没有给予足够的重视。因为计算机科学的智慧在于,张量是一个矩阵,但矩阵并不是一个张量。变量是你可以将其转换为的任何东西。
数学家们知道类型转换,但他们称之为“态射”等有趣的名字。他们会在压力下承认,如果你有适当的类型转换,你可以将一个向量用作相应维度的旋转。
但他们会说,你并没有将向量用作旋转,你是在某某某的基础上推导出一个双向量。这是正确的,如果你是一个 Prolog 超级 HM 类型检查器。如果你是一个编译器、一个解释器或一台计算机,这就不正确了。
无论如何,我仍然会和数学人争论这个,因为否认鸭子类型有效实在太荒谬了,但他们说得对,这仍然需要类型统一。
@St_Rev 不,张量是矩阵的子类型,而不是反过来。矩阵是更一般的对象,张量必须遵循更多的约束。
@SokobanHero 所以,由于多线性映射总是可以被实现为矩阵(好吧,严格来说是超矩阵,因为人们显然只用矩阵来指代秩为2的n维数组),在某些空间中,反之亦然,我认为朝任一方向发展都是合理的。
27.26K