升维 --- Learn from 线代 Chapter 1
线代Chapter 1讲的是向量和矩阵的基本概念,都是已知内容,给我留下印象最深的是它的升维思想。
我想说的升维,不是指(1) -> (1,1) -> (1,1,1)这种空间上的升维。而是指标量1 -> 向量(1) -> 矩阵[[1]]
-> 张量[[[1]]]
这种数据组织方式的升维。
一组标量数据,升维之后变成了一个向量。一组向量,升维之后变成了一个矩阵。
原本零散的数据,变成了一个整体。两组有内在关联的数据之间的计算,简化成了两个更高维度数据之间的计算。这是对数据的抽象。
再进一步扩展,聚在一起的数据也可以有不同的数据类型,只要是相关的数据,就可以聚到一起。这就形成了C语言里面的struct,或者python里面的tuple。那么定义在高维数据上的操作,例如向量相加,就类似于定义在struct上的算法。
而C++的class比C的struct在抽象方面做得更彻底。它不但把数据聚到一起,还它当成一种新的类型,并赋予它独特的行为。此时,一个完整的class实例才有意义,因为完整了class实例才有独立行为的能力。如果要在线代中类比这种做法的话,可以是SVD分解等类似的操作。此时的操作对象就是整个矩阵了。单独提取低维数据(一个class的内部数据、一个矩阵中的某个元素),对于高维数据(class实例、矩阵)的独特行为(类的行为、矩阵的SVD)来说,是没有意义的。
此时我想到了蚂蚁,通常认为一只蚂蚁是一个生命个体。单个蚂蚁虽然拥有完成的身体组件和独立的思想,但它一旦离开了蚁群,蚁生变得毫无意义,这不只是能不能存活的问题。因此,整个蚁群才是一个意义的生命的基本单位。