1.向量
向量是指可以加總(以生成新的向量),可以乘以標量(即數字),也可以生成新的向量的對象。
向量是有限維空間的點。
1.1向量例子
如果你有很多人的身高、體重、年齡數據,就可以把數據記為三維向量(height, weight, age)。
如果你教的一個班有四門考試,就可以把學生成績記為四維向量(exam1, exam2, exam3, exam4)。
1.2向量加法與減法
向量以分量方式(componentwise)做運算。這意味着,如果兩個向量v 和w 長度相同,那它們的和就是一個新的向量,其中向量的第一個元素等於v[0] + w[0],第二個元素等於v[1] + w[1],以此類推。(如果兩個向量長度不同,則不能相加。)
- 向量加法函數
def vector_add(v, w):
retrun [v_i + w_i for v_i, w_i in zip(v,w)]
- 向量減法函數
def vector_add(v, w):
retrun [v_i - w_i for v_i, w_i in zip(v,w)]
- 多個向量的加法運算
def vector_sum(*vectors):
result = vectors[0]
for vector in vectors[1:]:
result = vector_add(result, vector)
return result
#方法2
import functools import reduce
def vector_sum(*vectors):
return reduce(vector_add, vectors)
1.3向量的乘法
- 標量與向量的乘法
def scalar_multiply(c,v):
return [c * v_i for v_i in v]
- 系列向量的均值
def vector_mean(*vectors):
n = len(vectors)
return scalar_multiply(1/n, vector_sum(vectors))
- 點乘
def dot(v,w):
return sum(v_i * w_i for v_i, w_i in zip(v,w))
- 向量的平方和
def sum_of_squares(v)
return dot(v,v)
- 向量的長度
import math
def magnitude(v)
return math.sqrt(sum_of_squares(v))
def squared_distance(v,w):
return sum_of_squares(vector_subtract(v,w))
def distance(v,w):
return math.squrt(squared_distance(v,w))
# return magnitude(vector_subtract(v,w))
2.矩陣
矩陣是一個二維的數據集合。我們將矩陣表示為列表的列表,每個內部列表的大小都一樣,表示矩陣的一行。如果A是一個矩陣,那么A[i][j]就表示第i行第j列的元素。按照數學表達的慣例,我們通常用大寫字母表示矩陣。
2.1矩陣例子
2.2矩陣的形狀
def shape(A):
num_rows = len(A)
num_cols = len(A[0] if A else 0)
return num_rows, num_cols
如果一個矩陣有n 行k 列,則可以記為n×k 矩陣。我們可以把這個n×k 矩陣的每一行都當作一個長度為k 的向量,把每一列都當作一個長度為n 的向量:
2.3矩陣的創建函數
def make_matrix(num_rows, num_cols, entry_fn):
return [[entry_fn(i, j) for j in range(num_cols)] for i in range(num_rows)]
def is_diagonal(i, j):
return 1 if i == j else 0
make_matrix(5, 5, is_diagonal)
[[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]]
參考《數據科學入門》