換個角度看世界!用程式碼瞭解數學符號

全文共1595字,預計學習時長6分鐘

圖源:unsplash

學好數理化,走遍天下都不怕!這句話我們從小就聽,放到今天似乎依然行得通。達芬奇說:“數學是一切科學的基礎”,數學與程式碼之間也有著千絲萬縷的聯絡。

似乎任何熱衷於機器學習、資料科學的人都相信,總有一天,他們將研究透徹python庫,暢享裡面的數學知識。大量論文集將展現在你面前,詳細說明其原理。對核心數學的理解越深入,你就越可能獲得靈感,創造新方法。

對於多年來鑽研數學或從事機器數學學習的人來說,將上面這個方程式詳細地解析為含義和程式碼並不難。但是對大部分普通人來說,無異於看天書。古代數學家似乎都喜歡用有趣的外觀符號來表述直觀的方法,但卻使方程和變數複雜化了。

實際上,程式碼不僅可以編寫程式,還可以讓這些複雜的語言再次變得直觀起來。加深對數學理解的最好方法就是編寫程式碼段來描述方程式,這會讓理解變得簡單起來。

圖源:unsplash

看過下面這些例子,相信你也會有這樣的感覺。

求和與乘積

求和符號是迭代數學中最有用和最常用的符號之一。儘管設計複雜,但運算是相當簡單且有用。

x = [1,2, 3, 4, 5]result = 0for i in range(5):    result += x[i]Output of print(result)-> 15

如上所示,此符號代表從頂部的數字開始的for迴圈,頂端數字為最大值。在底部設定的變數將成為索引變數,並且每個迴圈的所有結果都將新增到總值中。

上面這個符號被稱為乘積運算子,跟求和符號運算方式相似,但不會相加每個結果,而是將它們相乘。

x = [1,2, 3, 4, 5]result = 1for i in range(5):    result *= x[i]Output of print(result)-> 120

條件括號

條件括號用於在特定條件下轉換方程的等式。對於碼農,常見的“ if”語句就是這樣。把它用程式碼表述是這樣的:

i = 3y = [-2, 3, 4, 1]result = 0if i in y:result = sum(y)elif i > 0:result = 1else:result = 0print(result) -> 6

如上所示,每一行括號中的正確表示法指定了每條路徑應執行的操作。我也將多餘的“包含”符號新增到每個條件中,以加強理解。我們檢查了i值是否在y列表中。確認過後,返回陣列的總和。如果i值不在陣列中,將基於該值返回0或1。

階乘

階乘用“!”表示,幾乎所有計算器上都有此符號。這個符號會好理解一些,不過程式碼會帶你進一步瞭解它的原理。

5!將表示為:

result =1for i in range(1,5):result *= iOutput of print(result) -> 120

逐點操作和笛卡爾矩陣乘法

再來看一下資料科學家們經常使用的語言庫(矩陣乘法)如何完成操作。逐點操作很容易理解,簡寫為:

請注意,該操作首先要求每個矩陣必須具有這樣的模型(即#行 =&#列=)

其程式碼如下所示:

y =[[2,1],[4,3]]z = [[1,2],[3,4]]x = [[0,0],[0,0]]for i in range(len(y)):for j in range(len(y[0])):        x[i][j] = y[i][j] *z[i][j]print(x) -> [[2, 2], [12, 12]]

最後,讓我們看一下機器學習中最常用的典型矩陣乘法。用複雜的術語來說,此運算為每個主要行與每個次要列的點積。

具體操作是:假設[#行,#列]→矩陣ixj要求#列(i)== #行(j)→最終輸出的模型為[#行(i), #列(j)]

看起來似乎很難理解,圖片能幫助你直觀瞭解這些操作。

該方程的程式碼如下(使用numpy點法):

y =[[1,2],[3,4]]z = [[2], [1]]# x has shape [2, 1]x = [[0], [0]]for i in range(len(y))for j in range(len(z):        x[i][j] = np.dot(y[i], z[:, j])print(x) -> [[4],             [10]]

圖源:unsplash

看完這幾個簡單的示例,是不是有種撥開迷霧見光明的感覺!

用簡單的程式碼學習數學,你會大有收穫的。

相關文章

新冠“終結者”?與人工智慧並肩戰疫情

新冠“終結者”?與人工智慧並肩戰疫情

新冠病毒正在肆虐全球,威脅著世界各國人民生命安全,也給世界經濟帶來巨大壓力。與此同時,研究者也在不斷探索努力尋找治癒方法。人工智慧技術在此時...