線性代數與Python


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]]

參考《數據科學入門》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM