數學公式太晦澀,不如用代碼寫出來:這是程式設計師學數學的獨特方式

2020-12-11 機器之心Pro

選自TowardDataScience

作者:Ian Rowan

機器之心編譯

參與:Panda W、一鳴

簡潔的代碼不僅能運行程序,還能用來學數學。

∑、∏、∈……如果你學習過數學,你一定知道這些符號的含義,而如果我們能用最喜歡的程式語言來理解它們,也許還能帶來更加透徹的領悟。近日,MindbuilderAI & nurio 創始人、機器學習專家 Ian Rowan 介紹了自己藉助代碼來理解數學計算過程的經驗。

對於想要在機器學習和數據科學領域創出一番事業或做出一些研究成果的人來說,終有一天會在鼓搗 Python 軟體庫的基礎上更進一步,跟隨自己的好奇心進入背後的數學領域。這通常會將你引向那些描述了各種原理的數量龐大的公開論文集。你對核心數學機制的理解越深入,你就越可能靈光閃現,成為一種新方法的創造者。在讀第一篇論文時,可能一開始一切都還很容易理解,但當你遇到下面這種公式時,你可能就會開始疑惑了:

對於學習過多年的數學或研究過機器學習的數學層面的人來說,這樣的等式可以通過精心的處理而解析為語言描述和代碼。但對其他很多人來說,這看起來可能就像天書。事實上,這看起來就像是古代的數學領袖選擇了看起來最有意思的符號來描述相當直觀的方法。這就導致了一個結果:等式和變量看起來比實際表達的含義還要複雜得多。

我發現代碼不僅能用來寫程序,而且還是用於解釋複雜問題的全球通用語言。當我學習數據科學背後的數學時,我總是發現理解數學的最佳方式是寫出描述這些等式的代碼段。最終,我理解了這些符號,現在讀它們就像讀一篇普通論文一樣。我希望通過這篇文章分享一些示例,讓大家知道用代碼描述數學竟會如此簡單!

求和與求積

在迭代數學方法中,求和符號是最有用且最常用的符號。儘管求和符號設計複雜,但實現方法卻非常簡單,而且也極其有用。

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

如前所示,這個符號表達的其實就是一個循環。求和符號上面的數字是這個循環的範圍,下面的數字是起始位置。下面的變量集會變成索引變量,每次循環的結果都被加起來,得到一個總和值。下面的符號則更少見一些:

這個符號通常被稱為乘積算子(Product Operator)。這個符號與求和符號的工作方式相似,只不過每次循環的結果不是相加,而是相乘。

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

階乘

階乘的符號是 !,大多數計算器都有這個功能。對很多人來說,這個符號表達的含義可能很明顯和直白,但還是值得用代碼來理解其原理。

5! 可以表示成:

result = 1for i in range(1,6): result *= iOutput 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 列表中。如果在,則返回數組的和。如果不在,我們則根據具體的值返回 0 和 1。

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

最後,我想快速介紹幾個任何數據科學家都可以用自己最喜歡的語言庫輕鬆完成的運算——矩陣乘法。理解矩陣乘法的最簡單方式是逐點運算。這可以簡單地寫成:

注意,首要要求是每個矩陣都必須形狀一樣(即 # rows= & #Columns=)。其代碼如下:

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

最後,我們來看一種典型的矩陣乘法過程,這在機器學習領域非常常用。用複雜的術語來說,這個運算的目的是求取每個主要行與每個次要列的點積。主要來說是下面的要求:假設 [#rows, #columns] → 矩陣 i x j 要求 #columns(i) == #rows(j) → 最終積的形狀為 [#rows(i), #columns(j)]

這看起來很令人困惑,我最好的建議是搜索一下這些要求的可視化圖片。

這個等式的代碼如下(使用了 numpy dot 方法):

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

本文僅給出了少量示例,但理解這些簡單代碼能讓任何程式設計師都能踏足乍看之下難以深入的數學世界。當然,這些方法都可以合併簡化,實現更高的效率,而且通常很多軟體庫中都有現成的方法可用。用簡單代碼寫出這些數學符號的意義在於通過寫出這些等式的真正計算過程來理解它們的含義。

原文連結:https://towardsdatascience.com/understanding-mathematical-symbols-with-code-5aa0c542644

相關焦點

  • 這些程式設計師說,穿成偽娘寫出來的代碼更好
    01 / 向程式設計師大佬遞女裝碼農界流傳著這麼一句座右銘:「三流碼農寫UI,二流碼農寫架構,一流碼農寫算法,頂級碼農穿女裝。」女裝程式設計師,是一群使用同種方式(穿女裝)達到各種個人目的(減少bug、降溫、不喜歡格子襯衫、期待編程之神附身等目的)的程式設計師,並以炫耀代碼通過率與發照片的形式吸納萌新。
  • 數學不太好,適合學計算機嗎?
    數學一般,120多分,所以,我不太想報考計算機、電子信息這些與數學和物理相關的專業,因為高中學怕了,擔心學不來。我的語文挺好的,考了130多分,在班裡一直靠前,我最想報考的是新聞傳播專業。」最近這樣想的女孩,真心不少。感覺自己在理科方面,夠努力了,但依然學不過班裡的學霸。而計算機的課程,什麼高數、編程看起來那麼難,擔心自己學不會。
  • 孩子學不好數學?聰明的家長會用這些方法,培養孩子數學思維能力
    這是因為很多家長只是讓孩子死記硬背那些結論、公式,而忘了培養孩子的邏輯思維。那麼到底該怎麼樣才能培養好孩子,從小的邏輯思維或者說數學思維呢?而且這會讓孩子自己去思考,拿幾個水果才是自己剛才說的那個數量呢?將數學滲透到生活的方方面面,引導孩子自己去發現問題,藉此對數學產生興趣。培養思維,方式很重要在孩子對數學感興趣之後,家長就該思考用什麼樣的方式去教導了。
  • 「數學之王」歐拉有多神,一度被懷疑是穿越者,創造出「上帝公式」
    數學,研究數量及其結構,同時涵蓋變化、空間和信息等概念,是一門觸類旁通、包容廣大的學術。它的歷史悠久,自初始概念誕生以來便橫貫著人類歷史盛衰。數學晦澀難懂,卻又能被世界上的每個人利用;簡易單一,科技民生卻又離不開它。不過本文要說的卻不是數學發展史的興替演變,而是一位數學史上的璀璨星辰。
  • 易讀易寫的Markdown,作數學筆記很容易,10分鐘就能掌握
    作為一個內容創作者、或者老師、學生,是不是經常會苦於沒有一個易用的工具,可以高效的編輯和管理文檔?若果真如此,我想Markdown非常適合你!Markdown是一種易讀易寫的輕量級純文本標記語言,由約翰·格魯伯在2004年創建。
  • 高中數學,背熟公式是重點——高考數學必背公式與知識點過關檢測
    其實數學並沒有那麼難,歸根究底,是因為大家沒有學習數學正確的方法。學會運用一些高中數學必背的公式定理解題,不論多麼難的題型,其實都是可以輕鬆解決的。無論你是理科生還是文科生,數學公式,你必須掌握。做數學題時,把用到的公式、基礎知識寫在題目旁邊,題做了,基礎知識也重新鞏固了!
  • 理工男用數學建模解鎖「脫單攻略」,三天後竟然真的脫單了?
    近日,重慶大學的研三學生劉群他用數學建模的方式得出了脫單攻略他通過數據分析、寫公式代碼等得出「女生對男生的好感度模型」至於該模型的效果?他告訴記者,他對數模一直很有興趣,屬於腦洞大、愛折騰的那類人,而這篇推文實際上用的都是些初等數學的知識,並不複雜。「用數模方法解決生活問題不算新鮮事,不過要將數學公式賦予其合理的實際戀愛意義,數學和實際生活結合,並且還要通俗、有趣活潑地講出來,這個比較頭痛。」劉群說,畢竟不是參加數學建模競賽,沒必要那麼複雜。於是他採用的基本是對數函數和一階的微分方程。
  • 傑作中的數學公式
    凡.高在世時,其藝術造詣並未得到充分肯定,但如今,他已成為人們心目中偉大的藝術家,其畫作不斷被拍出高價,在藝術史上達到了令人難以超越的高度,更耐人尋味的是:在被視為經典的凡,高后期作品之《麥田上的烏鴉》以及《星空》裡,科學家用獨特的眼光發現了非比尋常的元素,畫作中一些旋渦式的圖案背後竟然暗藏著複雜的數學和物理學公式。
  • 教孩子寫遊戲:什麼是作業系統?它和程式語言有什麼關係?
    隨著計算機的功能被開發得越來越多,程式設計師們發現了一個非常嚴重的問題:計算機功能太多太複雜了,一個人想從零開始學習,可能需要花費半輩子的時間,實在是太耗時間了。但是,計算機的這些功能都具有劃時代的意義,可不能因為難學就拋棄掉。
  • 教孩子寫遊戲:3D遊戲編程的必備數學知識,理解三維空間向量
    因為我們要寫的是3D遊戲程序,所以,我們必須要接觸兩個數學方面的難點知識——向量和矩陣。有的人問:這個這麼難,我們可不可以不學?我的答案是這樣的:如果你是有心要學習本課程,那麼這個是必須要學習的,是沒有道理可講的,是想破了腦袋也要學明白的。
  • 孩子數學不好怎麼辦?千萬別逼著孩子死學!題海戰術要不得!
    從小學到高中,數學作為一門基礎性學科一直是孩子成績組成部分的「大頭」,也是孩子成績拉開差距的重要分水嶺之一。很多家長朋友因為孩子的數學成績不理想常常感到苦惱,因為想要提升數學成績,不像其他學歷背誦幾個知識點,記住幾句名言,把字寫得好看些就能夠解決的。
  • 125個高中數學重要秒殺公式,選填題直接寫答案,提升解題速度
    高中數學=難,課堂筆記寫了一大堆,課後複習根本用不上。學校老師講的永遠是書上的知識點,直接做題需要反覆推導演算。考場上,做完選填題,考試時間就過去了三分之一,大題根本做不完。如果找不到適合的學習方法和答題技巧,那麼努力不一定能換來好成績。
  • 實用數學|歐拉公式
    歐拉是18世紀數學界最傑出的人物之一,他不但為數學界作出貢獻,更把整個數學推至物理的領域。他是數學史上最多產的數學家,平均每年寫出八百多頁的論文,還寫了大量的力學、分析學、幾何學、變分法等的課本,《無窮小分析引論》、《微分學原理》、《積分學原理》等都成為數學界中的經典著作。歐拉對數學的研究如此之廣泛,因此在許多數學的分支中也可經常見到以他的名字命名的重要常數、公式和定理。
  • 初中數學跟不上,與小學沒學「奧數」有關嗎?數學老師告訴你答案
    奧數班培訓的大多都是解題的技巧,就好像我們用鑰匙開鎖是一個原理。奧數比我們上學所學的數學,難度要大很多,想要順利的解開奧數題目,光靠「硬算」是沒有效率的。奧數題通常會採用很多非常規性思維的題目,它解題的要點主要是讓你理解其中的解題技巧,從而能夠得出正確的答案。
  • 學編程的十大誤區:看看你中招了沒?
    數學不好學不會編程很多人並不清楚數學與編程之間的關係,認為數學不好就學不會編程,將數學與編程直接畫上等號。實際上,作為程式設計師,你會花很多時間在寫代碼上,而不是寫數學公式。況且你的數學知識不會直接構成你的編程技術。
  • 美國數學教授40歲開始用數學公式做投資,業績遠超巴菲特索羅斯
    可是恰恰這是一位「半路出家」的數學家詹姆斯·西蒙斯(James Simons)將兩者完美地融合在了一起:他用數學公式來投資,且戰績遠遠好於索羅斯和巴菲特。這不得不讓人讚嘆:會金融的數學家,打遍天下都不怕!
  • 不用3D建模軟體,如何用數學公式創造一個女孩?會眨眼,帶有光影
    木易 發自 凹非寺量子位 報導 | 公眾號 QbitAI這是一個完全用數學公式創造的女孩,她長這樣:絕佳的光影,移動的眼珠,是不是感覺惟妙惟肖?最近,油管上的一項用數學進行3D人物建模的視頻火了,截止目前,已有近8w的播放量。3D人物建模,就是數學公式對人體的描述,目前已經廣泛應用於生活之中。不過,現在直接使用計算機軟體進行的建模,還不足以讓人領略這其中深層次的數學魅力。
  • 77頁,高中數學必備公式大全,背熟它們,數學再「撿」20分
    對於高中數學來說,數學公式你必須掌握。小器提醒一下同學們,基礎知識在高考中佔到80%。數學公式就是基礎知識的重中之重。記憶數學公式的小貼士:1、做數學題時,把用到的公式、基礎知識寫在題目旁邊,題做了,基礎知識也重新鞏固了!既做到了保持對題目的敏感,也讓基礎知識在你的腦子中更清晰,也知道公式應該怎麼用了,也是又記了一遍公式。
  • 趁東風,學數學,颳起線上學數學的旋風!
    從每天只有幾名學生在「趁東風·學數學」上學習,到現在共計350萬人,每日數十萬用戶在平臺上學習數學,而「趁東風」線上數學教授平臺僅僅用了2年。「趁東風」以「掌握」為核心的教學理念,獨特創新的互動教學方式和良好的學習效果,深受學生和家長的喜愛,每月的付費用戶近萬人,越來越多的家長都讓孩子到這個平臺上來學習數學知識。
  • 學霸是如何學數學的?只要4個簡單步驟,讓孩子輕鬆學好數學
    隨著年級的增加,數學知識越學越多, 到了三四年級孩子數學成績就越來越差了, 將來還要上五,六年級, 怎麼辦?如果不幫孩子歸納總結出各種知識點和公式,孩子肯定不能適應數學學習,那麼孩子數學成績肯定會越來越差。 怎麼解決這個問題呢?