购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 标量、向量、矩阵和张量

在机器学习、深度学习中,首先遇到的就是数据,如果按类别来划分,我们通常会遇到以下几种类型的数据。

1.标量(scalar)

一个标量就是一个单独的数,一般用小写的变量名称表示,如a、x等。

2.向量(vector)

向量就是一列数或一个一维数组,这些数是有序排列的。通过次序中的索引,我们可以确定向量中每个单独的数。通常我们赋予向量粗体的小写变量名称,如x、y等。一个向量一般有很多元素,这些元素如何表示?我们一般通过带脚标的斜体表示,如x 1 表示向量x中的第一个元素,x 2 表示第二元素,依次类推。

当需要明确表示向量中的元素时,我们一般将元素排列成一个方括号包围的纵列:

我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。

向量可以这样表示,那我们如何用编程语言(如Python)来实现呢?如何表示一个向量?如何获取向量中每个元素呢?请看如下实例:


import numpy as np

a=np.array([1,2,4,3,8])
print(a.size)
print(a[0],a[1],a[2],a[-1])

打印结果如下:


5
1 2 4 8

这说明向量元素个数为5,向量中索引一般从0开始,如a[0]表示第一个元素1,a[1]表示第二个元素2,a[2]表示第三个元素4,依次类推。这是从左到右的排列顺序,如果从右到左,我们可用负数来表示,如a[-1]表示第1个元素(注:从右到左),a[-2]表示第2个元素,依次类推。

3.矩阵(matrix)

矩阵是二维数组,其中的每一个元素被两个索引而非一个所确定。我们通常会赋予矩阵粗体的大写变量名称,比如A。如果一个实数矩阵高度为m,宽度为n,那么我们说A∈R m×n

与向量类似,可以通过给定行和列的下标表示矩阵中的单个元素,下标用逗号分隔,如A 1,1 表示A左上的元素,A 1,2 表示第一行第二列对应的元素,依次类推。如果我们想表示1列或1行,该如何表示呢?我们可以引入冒号":"来表示,如第1行,可用A1,:表示,第2行用A2,:表示,第1列用A:,1表示,第n列用A:,n表示。

如何用Python来表示或创建矩阵呢?如果希望获取其中某个元素,该如何实现呢?请看如下实例:


import numpy as np

A=np.array([[1,2,3],[4,5,6]])
print(A)
print(A.size)    #显示矩阵元素总个数
print(A.shape)   #显示矩阵现状,即行行和列数
print(A[0,0],A[0,1],A[1,1])
print(A[1,:])  #打印矩阵第2行

打印结果:


[[1 2 3]
 [4 5 6]]
6
(2, 3)
1 2 5
[4 5 6]

矩阵可以用嵌套向量生成,和向量一样,在NumPy中,矩阵元素的下标索引也是从0开始的。

4.张量(tensor)

几何代数中定义的张量是向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,向量视为一阶张量,那么矩阵就是二阶张量,三阶就称为三阶张量,以此类推。在机器学习、深度学习中经常遇到多维矩阵,如一张彩色图片就是一个三阶张量,三个维度分别是图片的高度、宽度和色彩数据。

张量(tensor)也是深度学习框架TensorFlow的重要概念。TensorFlow由tensor(张量)+flow(流)构成。

同样我们可以用Python来生成张量及获取其中某个元素或部分元素,请看实例:


B=np.arange(16).reshape((2, 2, 4))   #生成一个3阶矩阵
print(B)
print(B.size)    #显示矩阵元素总数
print(B.shape)   #显示矩阵的维度
print(B[0,0,0],B[0,0,1],B[0,1,1])
print(B[0,1,:])

打印结果如下:


[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
16
(2, 2, 4)
0 1 5
[4 5 6 7]

5.转置(transpose)

转置以主对角线(左上到右下)为轴进行镜像操作,通俗一点来说就是行列互换。将矩阵A转置表示为A T ,定义如下:

如:

向量可以看作只有一列的矩阵,把(3.1)式中向量x进行转置,得到下式。

用NumPy如何实现张量的转置呢?很简单,利用张量的T属性即可,示例如下:


C=np.array([[1,2,3],[4,5,6]])
D=C.T       #利用张量的T属性(即转置属性)
print(C)
print(D)

打印结果如下: Zzpy4SydK/Y2pNE63eKEHw5cIdERjdMkySxNQmVnazbl8m7fvDOi01yjEK2xbzwW


[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]

点击中间区域
呼出菜单
上一章
目录
下一章
×