在数据科学当中线性代数是非常重要的概念,其中向量与矩阵是非常重要的技术。
向量
将数据表示成向量能够极大的方便之后我们对数据进行处理以及分析。
具体来说向量是有限维空间内的点。在python里可以将向量用列表来表示,二维向量表示为[a, b]、三维向量[a, b, c]、四纬向量[a, b, c, d]。比如在要表示一个人的年龄、身高、体重的时候可以用一个三维向量来表示:[age, height, weight]。
可以用python编写常用的向量运算的方法:
1. 向量的加法:向量以分量的方式做加法
def vector_add(w, v):
return [w_i + v_i for w_i, v_i in zip(w, v)]
2. 向量的减法:
def vector_subtract(w, v):
return [w_i - v_i for w_i, v_i in zip(w, v)]
3. 向量乘以标量:
def vector_multiply(num, v):
return [num * v_i for v_i in v]
4. 向量的点乘:
def dot(w, v):
return [w_i * v_i for w_i, v_i in zip(w, v)]
5. 计算向量的大小(长度):
上面的dot(w, v)方法可以算一个向量的平方和,平方和开平方后就是向量的长度。
def magnitude(v):
return math.sqrt(dot(v, v))
矩阵
矩阵是一个二维的数据集合,在python里我们可以把矩阵表示为列表的列表,A[i][j]代表矩阵的第i行第j列。在实际应用中我们可以把每个向量当作矩阵的一行,然后用矩阵来表示一个多维的向量集。如果矩阵有n行k列,记为n*k的矩阵,每一行当作长度为k的向量,每一列当作长度为n的向量。
A = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
用python编写常用的矩阵运算的方法:
1. 计算矩阵有几行几列,得到矩阵的形状:
def get_shape(A):
num_rows = len(A)
num_cols = len(A[0])
return num_rows , num_cols
2. 如果矩阵有n行k列,记为n*k的矩阵,每一行当作长度为k的向量,每一列当作长度为n的向量。得到矩阵的每一行,每一列:
def get_row(A, i):
return A[i]
def get_column(A, j):
return [A_i[j] for A_i in A]
3. 创建一个矩阵:
def is_diagonal(row, col):
if row == col:
return 1
else:
return 0
def make_matrix(rows, cols, entry_fun):
A = []
for i in range(rows):
A.append([])
for j in range(cols):
A[i].append(entry_fun(i, j))
总的来说矩阵是一个很重要的概念:
首先就像上面说的可以使用矩阵来表示一个多维的向量集合;其次可以用矩阵表示二维关系,如果节点i和节点j有关系,那么a[i][j]为1,如果没关系,就为0;还可以用n*k的矩阵表示一个线性函数,这个函数将k维的向量映射到n维的向量上。