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

2021-01-10 機器之心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

相關焦點

  • word中的數學公式數學符號怎樣插入?
    在寫數學論文或者 是日常工作生活中,經常會遇到插入數學公式或者是插入特殊的數學符號,這些符號如果不是經常使用電腦敲打,就不知道從何下手了,今天小編以word2007為例,講一下如何插入特殊的數學符號和公式。
  • 程式設計師:代碼全部替換成中文,你能接受嗎?
    如果將代碼替換為中文會怎麼辦? 程式設計師在觀看時會不會頭疼呢?自己吃藥的醫生真的可以理解醫生寫的藥單嗎?醫生認真寫下這些藥物的名稱了嗎?實際上,由於藥用材料種類繁多,用漢字寫東西太浪費時間了。因此,醫生還必須學習一種語言,並用一些筆法來代表我們所謂的醫學。對於程式設計師來說,他們也有自己的語言。儘管對於普通人來說,程序是一個很高且無法想像的事情,但是對於程式設計師而言,所有代碼都與我們每天閱讀漢字的方式相同。
  • 高考數學124分的大一新生,學高數學到崩潰?最大心願是不掛科!
    在我國,不同的大學專業,學習的內容是不一樣的,但是每個專業裡都會有特別難學的課程,掛科率非常高,可以說讓大一新生們膽戰心驚!比如醫學專業的生理生化,土木專業的各種力學,教育專業的各種心理學等都是這種情況!其實在對於理科生來說,還有一個大學專業非常的難學,即使是學霸也要擔心會掛科?
  • 用最浪漫的數學表白,愛情數學表白公式
    去向你愛的那個人表白,是一件很浪漫的事情,所以說當他遇到那個很喜歡的人,最想要去做的事情,就是大膽的去向他表白,如果現在的你還無法用語言來形容你現在的心情,我們可以用最浪漫的數學表白?或許這樣的表白方式會讓對方覺著你不僅是一個很浪漫的人,而且還是一個智商很高的人,這樣也可以緩解你用很多的甜言蜜語來表白,讓對方覺著你是一個情場老手的尷尬,因為現在的女生他們都比較的理智,對於那些會說甜言蜜語的男生,第一印象也絕對不會很好,在這個時候,我們如果可以用一些能夠表達自己心意的數字來進行表白,說不定會讓你表白的成功機率增加,會讓女孩覺著你是一個很有學問的男孩。
  • 為了避免成為代碼狗 程式設計師用AI來訓練代碼
    2013年,Craig Venter宣布,在對人類基因組解碼的十年後,他現在已經開始寫代碼,允許他創造合成生物。 「現在越來越明顯,」他說,「地球上已知的所有活細胞DNA都是軟體驅動的生物機器。」即使自助文獻堅持,你可以黑自己的原始碼,重新編程你的愛情生活、你的睡眠習慣、你的開銷習慣。在這個世界上,寫代碼的能力已經不只是一個理想的技能,而且是與掌握內幕狀態的敲門磚。
  • 數學之王歐拉有多強?發現最美數學公式,給圓周率取名為π
    在數學幾百年的歷史中,有一位「數學之王」。論起對數學的貢獻,如果他要稱第二,可能沒人敢稱第一。自然常數e,用的是他名字的首字母;圓周率π,是他取的名字;他發現了「世界上最美、最簡單也最複雜的公式」;而他傳奇的一生,更是從剛學會走路就會算數開始,直到死亡前一秒還在討論公式中結束;也許他的全名大家不熟悉,但一定知道以他名字命名的「歐拉公式」。
  • 初中生如何學好數學?學霸都在用的3個方法,分享給你
    其中,最不適應的科目應該就是數學。相比小學數學, 初中數學難度大幅增加,還增加了很多題型,導致很多同學都在數學上跌了跟頭,一提到數學就頭疼。那麼,初中數學應該如何去學習呢?不妨看看身邊的學霸們都在怎麼學。學霸們的方法對普通同學來說很有借鑑意義。這裡簡單介紹3個學霸們都在使用的數學學習方法,請大家看完帶著自家孩子實踐一下。
  • 理科生用數學公式寫抒情詩 改「不解風情」形象
    在理科生眼中,複雜難懂的微積分公式一經組合,就化身成為綿綿情話。最近復旦大學數學系舉辦了三行情詩大賽,並在官方微博上曬出大家的作品。這組理科生的「浪漫密碼」在文科生眼中像天書,理科生卻能立刻意會。「看似一本正經的數字、公式也能演繹出浪漫的愛情。」一位網友評價說。
  • 把數學概念編成遊戲,德國人也太會玩了,這樣學數學太歡樂
    然後將分出來的食物圈出來。這種故事帶入、實物解釋抽象的數學概念,對孩子來講可以說屢試不爽,孩子在圈圈畫畫的過程就記住了平均分。二、加倍加倍這個概念,我自認為我肯定給孩子解釋不明白,於是去查了一下定義。結果加倍的解釋是:增為兩倍大,指程度比原來深得多。看完這個解釋,我笑了笑,我自知給孩子講完會更蒙圈,那我們看看德國人是咋用遊戲表述的吧。
  • 老師把公式寫成歌 盤點初中數學的26個口訣
    川北在線核心提示:原標題:老師把公式寫成歌 盤點初中數學的26個口訣 數學也可以像音樂一樣優美,近日,一名初中數學老師寫的《幾何輔助線之歌》火了。 數學公式也能寫成歌,盤點初中數學的26個口訣 他說希望可以用寫歌的方式克服同學們對數學的恐懼,我們來感受一下這首歌。
  • 數學老師怒斥:1-6年級數學公式大全都沒有掌握,還想考100分?
    數學老師怒斥: 1-6年級數學公式大全都沒有掌握,還想考100分?數學一直是學習的一個重點科目,也是拉分最嚴重的一個學科。小學作為數學學習的基礎階段,也是最容易被打擊忽視的階段。很多孩子升到高年級發現上課更不上老師的節奏,考試成績急劇下滑,再想給孩子補救也是亡羊補牢。
  • 缺乏數學思維,以後很難學懂數學,看德國孩子如何用遊戲啟蒙數學
    每次數學考試之前,都會祈求試卷上的題,但願我都背過。用這種死記硬背的方式應付考試,說到底其實是不懂數學,缺乏數學思維。缺乏數學思維的孩子,小數學一二年級的成績還可能名列前茅,但是到了三年級應用題一出,會打得他措手不及,這是因為一二年級的算術可以通過記憶力背下來,但是應用題考的是邏輯,是數學思維。
  • 數學名人 | 無處不在的歐拉,你真的了解什麼叫做數學大神嗎?
    平均每年寫出八百多頁的論文,還寫了大量的力學、分析學、幾何學等課本,《無窮小分析引論》、《微分學原理》、《積分學原理》等都成為數學中的經典著作。歐拉對數學的研究如此廣泛,因此在許多數學的分支中也可經常見到以他的名字命名的重要常數、公式和定理。1783年9月18日於俄國彼得堡去逝。歐拉是18世紀數學界最傑出的人物之一,在科學界享有泰山北鬥的崇高地位。
  • 利用冥想他獲得3900個公式,小夥單槍匹馬幫助人類數學進步幾百年
    拉馬努金家裡非常窮,所以經常通過出租房屋的方式補貼家用,當拉馬努金11歲的時候,家裡來了2位房客,他們在附近的政府學院讀書,他們發現拉馬努金非常喜歡數學,於是把一本《龍氏三角學》的教科書留給了他,這本書本是大學階段才學習的書籍,拉馬努金不到2年的時間,就全部掌握了。還推導出了歐拉公式:eix=cosx+isinx,他的數學天賦很高,即使只是看看教科書,也能無師自通,發現新定理。
  • 零基礎學數學的6大原則(四:數學學習的規律)
    傳統的數學學習方法,都是從阿拉伯數字0-10開始學起,而後再學加減乘除四則運算,後面又學代數、微積分、幾何、數列、概率、統計等。可以說,都是在抽象思維上由淺入深。我們拿著這種方式學來的數學,再去解決現實的問題,卻往往束手無策,這就是所謂的高分低能現象。這種現象,在英語的學習中也經常出現。我們學英語,往往從26個英文字母開始,再記單詞、拼讀、語法等,最後才去使用。
  • MBA聯考:MBA數學公式大全
    【MBA中國網訊】大家都知道,報考MBA數學是必考的,很多人都為此頭疼,不知道從何下手呀,數學不像語文,英語那麼簡單,記個大概再結合理論,理解基本就差不多了,可數學怎麼記,又不知道要考什麼公式?接下來都學網的老師就教大家該如何備考MBA數學公式。
  • 學好數學的方法20條 如何學好高中數學
    2、看《數學形成思想》,不要看《數學變成死相》。3、課前及時預習知識。4、 不要放過任何一道看上去很簡單的例題——他們往往並不那麼簡單,或者可以引申出很多知識點。5、會用數學公式,並不說明你會數學。6、如果不是天才的話,想學數學就不要想玩遊戲——你以為你做到了,其實你的數學水平並沒有和你通關的能力一起變高——其實可以時刻記住:學數學是你玩「生活」這個大遊戲玩的更好!7、進行數學錯題記錄,常常練習做錯的題,避免錯誤再次發生。8、做好數學筆記,對於一些不太熟悉的知識要記下來。9、在學習數學的時候,我們要拓展自身的解題思路。
  • 公務員考試必看數學公式!
    本文江蘇公務員考試網小編匯總行測考試中可能會用到的數學公式,希望對考生們有所幫助。掌握這些公式,對於提高公務員考試做題速度和準確率是有一定幫助的。,除非特殊說明,利潤率是用利潤除以成本得到。
  • 數學極差的程式設計師-ruby之父
    不知道從什麼時候開始,人們要求程式設計師的英文要好,要求他的數學要好。然而有個人數學極差,但是卻成為了一個優秀的程式設計師。他就是Ruby之父-松本行弘。松本行弘,1965年4月14日出生在日本鳥取縣。和其他計算機界的前輩一樣,他接觸計算機也非常早。
  • 中科院院士林群:從事數學研究69年 讓更多人了解微積分
    就得用他熟悉的知識來講。」到了辦公室還沒坐穩當,林群便從表面斑駁的黑色挎包裡掏出一大摞資料,帶記者走進微積分的世界……  「學習也好,研究也好,一定要有刨根問底的決心」  從1952年考入廈門大學數學系算起,林群已經在數學的海洋裡摸爬滾打了69年。數學,在普通人看來,晦澀難懂、推理複雜,林群卻說,「數學領域十分奇妙,你能從一行行公式和一串串數字中,找到樂趣與挑戰」。