标量、向量、矩阵、张量的关系
这4个概念是维度不断上升的,我们用点线面体的概念来比喻解释会更加容易理解:
点——标量(scalar)
线——向量(vector)
面——矩阵(matrix)
体——张量(tensor)
什么是标量
标量只有大小概念,没有方向的概念。通过一个具体的数值就能表达完整。
比如:重量、温度、长度、提及、时间、热量等都数据标量。
什么是向量
向量主要有2个维度:大小、方向。
大小:箭头的长度表示大小
方向:箭头所指的方向表示方向
向量的3种表达方式
代数表示、几何表示、坐标表示
什么是矩阵
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。
由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。记作:
什么是张量
张量有很多种定义的方式,这里只讨论人工智能领域里的概念。
在人工智能领域,定义比较简单,TensorFlow是这么定义的:
A tensor is a generalization of vectors and matrices to potentially higher dimensions.
简单翻译过来就是:张量是多维数组,目的是把向量、矩阵推向更高的维度。
先定义一个矩阵
from mxnet import np, npx
npx.set_np()
A = np.arange(20).reshape(5, 4)
A
输出
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[12., 13., 14., 15.],
[16., 17., 18., 19.]])
默认情况下,调用求和函数会沿所有的轴降低张量的维度,使它变为一个标量。
我们还可以[指定张量沿哪一个轴来通过求和降低维度]。
以矩阵为例,为了通过求和所有行的元素来降维(轴0),可以在调用函数时指定axis=0
。
由于输入矩阵沿0轴降维以生成输出向量,因此输入轴0的维数在输出形状中消失。
A_sum_axis0 = A.sum(axis=0)
A_sum_axis0, A_sum_axis0.shape
输出
(array([40., 45., 50., 55.]), (4,))
指定axis=1
将通过汇总所有列的元素降维(轴1)。因此,输入轴1的维数在输出形状中消失。
A_sum_axis1 = A.sum(axis=1)
A_sum_axis1, A_sum_axis1.shape
输出
(array([ 6., 22., 38., 54., 70.]), (5,))