【譯】用Python實現各種數學符號運算

翻譯:老齊數組

與本文相關圖書推薦:《跟老齊學Python:數據分析》bash


在機器學習項目中,你確定要在代碼中實現各類運算,其中必然要用到各類數學符號,所以,必須瞭解並熟知如何實現。markdown

本文列出經常使用的數學符號及其Python實現方法,一旦用到,就能夠直接拷貝。機器學習

\frac{1}{N}\sum_{i=1}^N(y_i-\hat{y_i})^2

索引

x_i

這個符號用於表示向量中第幾個值。函數

x = [10, 20, 30]
i = 0
print(x[i]) # 10
複製代碼

還能夠拓展到2維向量,乃至更多維度。oop

X_{ij}
x = [ [10, 20, 30], [40, 50, 60] ]
i = 0
j = 1
print(x[i][j]) # 20
複製代碼

求和

\sum_{i=1}^Nx_i

這個符號的意思是對某一範圍內的向量中的元素求和,上下標爲範圍。它等同於Python中對向量的索引從0到N-1進行循環,注意,如何用前面的x_i符號獲得每一個值得索引。學習

x = [1, 2, 3, 4, 5]
result = 0
N = len(x)
for i in range(N):
    result = result + x[i]
print(result)
複製代碼

上面的代碼能夠用內置函數簡化:spa

x = [1, 2, 3, 4, 5]
result = sum(x)
複製代碼

PI

\prod_{i=1}^Nx_i

這個符號的意思是將向量中指定範圍的元素求乘積(讀做:pi,即字母π的大寫形式),Python中的實現方法就是循環獲得元素,而後計算乘積。翻譯

x = [1, 2, 3, 4, 5]
result = 1
N = len(x)
for i in range(N):
    result = result * x[i]
print(result)
複製代碼

管道符

管道符(鍵盤上的豎線)有多種不一樣的含義,要具體看它的應用方式。code

絕對值

|X|

做爲絕對值符號,返回該數值的絕對值。

x = 10
y = -20
abs(x) # 10
abs(y) # 20
複製代碼

範數

||X||

範數,也稱爲向量的模(長),即向量的大小。Python中經過計算數組中每一個值的平方和再開方獲得。

x = [1, 2, 3]
math.sqrt(x[0]**2 + x[1]**2 + x[2]**2)
複製代碼

Epsilon

3\in X

這是一個希臘字母(讀如:[ˈepsɪlɑːn]),它用於檢驗某個元素是否是集合的一員,在Python中,用下面的方式實現:

X = {1, 2, 3}
3 in X
複製代碼

函數

f:X \to Y

這個符號表示函數中的X與Y的對應關係,Python中就是編寫一個函數,X爲參數,輸出Y。

def f(X):
    Y = ...
    return Y
複製代碼

有時候你也會遇到下面的表述方式,用R替代X、Y:

f:R \to R

R意味着輸入輸出都是實數,好比整數、浮點數、無理數、有理數等。Python中固然能夠表示:

x = 1
y = 2.5
z = math.pi
複製代碼

還有可能遇到下面的形式:

f:R^d \to R

R^d意味着實數組成的d維度向量(譯者注:實數域的d維子空間)。

假設d=2,Python中能夠用Numpy提供的函數,例以下面代碼中的求和函數,返回的是一個數值,它實現了R^dR的映射

X = [1, 2]
f = np.sum
Y = f(X)
複製代碼

譯者注: 嚴格來說,本文上面的示例不很準確。[[1], [2]],這樣的纔是嚴格的2維。

張量

轉置

X^T

這個符號表示的是行列轉換,Python中用下面方法實現:

X = [[1, 2, 3], 
    [4, 5, 6]]
np.transpose(X)
複製代碼

輸出結果顯示行列交換了位置。

[[1, 4], 
 [2, 5],
 [3, 6]]
複製代碼

乘法

X \bullet Y

張量間的乘法,在Python中用np.multiply實現:

x = [[1, 2], 
    [3, 4]]
y = [[2, 2], 
    [2, 2]]
z = np.multiply(x, y)
複製代碼

輸出是:

[[2, 4]],
[[6, 8]]
複製代碼

點積

XY
X.Y

點積的結果是每一個序列中對應數字積的和。

X = [1, 2, 3]
Y = [4, 5, 6]
dot = sum([i*j for i, j in zip(X, Y)])
# 1*4 + 2*5 + 3*6
# 32
複製代碼

有帽子的符號

\hat{x}

向量上有一個小帽子的符號,表示的是向量中的每一個份量除以向量的長度。

x = [1, 2, 3]
length = math.sqrt(sum([e**2 for e in x]))
x_hat = [e/length for e in x]
複製代碼

如此所得向量的大小就是1,而且方向不變。

math.sqrt(sum([e**2 for e in x_hat]))
# 1.0
複製代碼

感嘆號

x!

用感嘆號表示階乘,即從1開始,一直到該數字的全部整數的乘積,在Python中,這樣計算:

x = 5
fact = 1
for i in range(x, 0, -1):
    fact = fact * i
print(fact)
複製代碼

也能夠用內置模塊中的函數實現:

import math
math.factorial(x)
複製代碼

輸出是:

# 5*4*3*2*1
120
複製代碼

原文連接:amitness.com/2019/08/mat…

搜索技術問答的公衆號:老齊教室

在公衆號中回覆:老齊,可查看全部文章、書籍、課程。

相關文章
相關標籤/搜索