前言:最近在回顾自己学习的过程,发现很多东西没有做一个具体的梳理,所以最近在回顾的时候也想整理一下发在这里,主要是方便自己回头看,如果能帮助到一些人也是我的荣幸,如果有疑问或者错误也请指出。
参考书籍:《机器学习线性代数基础-python语言描述》 张雨萌编著。
在参考书的基础上,加入了一些自己的想法、整理和一些用法示例的补充,很多内容不一定与原书一致
由于主要是为了自己方便看,所以需要说明的是,此处默认读者已经掌握基础的线性代数相关知识,本文的目的只是使用python进行相关描述,也并非是为了做一个具体的教程,但我相信只要有基本的python和数学基础都能看懂
参考书籍:《机器学习线性代数基础-python语言描述》 张雨萌编著。
在参考书的基础上,加入了一些自己的想法、整理和一些用法示例的补充,很多内容不一定与原书一致
由于主要是为了自己方便看,所以需要说明的是,此处默认读者已经掌握基础的线性代数相关知识,本文的目的只是使用python进行相关描述,也并非是为了做一个具体的教程,但我相信只要有基本的python和数学基础都能看懂
目录
1. 向量的创建
这里使用numpy库来进行向量的创建以及之后的内容
1.1 行向量
代码如下:
import numpy as np
a = np.array([1,2,3,4])
print(a)
运行结果为:
[1 2 3 4]
默认生成的是一个行向量
1.2 列向量
需要注意的是,不同于行向量可以直接写成一个一维的形式,仔细观察上面的结果其实是一个只有一个元素的矩阵,里面有四个数字,列向量要写成n*1的形式,是一个二维的矩阵,所以在创建的时候需要注意多加一个括号写成二维
转置很简单,只需要在向量/矩阵后面加一个 .T 即可
如果没有加上中括号以增加维度,会发现转置之后没有变化:
import numpy as np
a = np.array([1,2,3,4])
print(a)
print(a.T)
结果为:
[1 2 3 4]
[1 2 3 4]
这是因为python将其看为一个一维数组,里面是1234,所以转置之后结果不会变化
正确的代码如下:
import numpy as np
a = np.array([[1,2,3,4]])
print(a)
print(a.T)
运行结果为:
[[1 2 3 4]]
[[1]
[2]
[3]
[4]]
观察这部分的输出,与行向量是有差别的,这里是一个二维
当然,也可以通过一些方式对以一维形式创建的行向量进行转置,这里介绍 np.newaxis ,它可以增加一个维度
看看如下示例:
import numpy as np
a = np.array([1,2,3,4])
print(a)
print(a.shape)
A = a[np.newaxis,:]
print(A)
print(A.shape)
结果为:
[1 2 3 4]
(4,)
[[1 2 3 4]]
(1, 4)
这里 .shape 的作用是查看它的规模,可以看出,在此处,[1,2,3,4]被视为一维数组,而 np.newaxis 的作用就是在他的位置处插入一个维度,这里是插在前面,所以变为了 (1,4) ,冒号是一个切片,可以自行修改使用不同的切片来尝试以加深对插入维度的理解
从上面的例子可以简单想到,如果需要一个列向量,也就是 (4,1) ,只需要在后面插入一个维度即可,如下所示:
import numpy as np
a = np.array([1,2,3,4])
print(a)
print(a.shape)
A = a[:,np.newaxis]
print(A)
print(A.shape)
结果自然为:
[1 2 3 4]
(4,)
[[1]
[2]
[3]
[4]]
(4, 1)
2. 向量的运算
2.1 向量加法
只需要将两个向量简单的相加即可,注意维度的一致
import numpy as np
a = np.array([[1,2,3]])
b = np.array([[4,5,6]])
print(a + b)
print(a.T + b.T)
运行结果如下:
[[5 7 9]]
[[5]
[7]
[9]]
2.2 向量的乘法
2.2.1 数量乘法(数乘)
依然是简单的相乘即可,数字在前后皆可
import numpy as np
a = np.array([