小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)學(xué)公式太晦澀,不如用代碼寫出來:這是程序員學(xué)數(shù)學(xué)的獨(dú)特方式

 板橋胡同37號(hào) 2020-03-13
選自TowardDataScience

作者:Ian Rowan

機(jī)器之心編譯

參與:Panda W、一鳴

簡(jiǎn)潔的代碼不僅能運(yùn)行程序,還能用來學(xué)數(shù)學(xué)。

∑、∏、∈……如果你學(xué)習(xí)過數(shù)學(xué),你一定知道這些符號(hào)的含義,而如果我們能用最喜歡的編程語言來理解它們,也許還能帶來更加透徹的領(lǐng)悟。近日,MindbuilderAI & nurio 創(chuàng)始人、機(jī)器學(xué)習(xí)專家 Ian Rowan 介紹了自己借助代碼來理解數(shù)學(xué)計(jì)算過程的經(jīng)驗(yàn)。


對(duì)于想要在機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)領(lǐng)域創(chuàng)出一番事業(yè)或做出一些研究成果的人來說,終有一天會(huì)在鼓搗 Python 軟件庫的基礎(chǔ)上更進(jìn)一步,跟隨自己的好奇心進(jìn)入背后的數(shù)學(xué)領(lǐng)域。這通常會(huì)將你引向那些描述了各種原理的數(shù)量龐大的公開論文集。你對(duì)核心數(shù)學(xué)機(jī)制的理解越深入,你就越可能靈光閃現(xiàn),成為一種新方法的創(chuàng)造者。在讀第一篇論文時(shí),可能一開始一切都還很容易理解,但當(dāng)你遇到下面這種公式時(shí),你可能就會(huì)開始疑惑了:


對(duì)于學(xué)習(xí)過多年的數(shù)學(xué)或研究過機(jī)器學(xué)習(xí)的數(shù)學(xué)層面的人來說,這樣的等式可以通過精心的處理而解析為語言描述和代碼。但對(duì)其他很多人來說,這看起來可能就像天書。事實(shí)上,這看起來就像是古代的數(shù)學(xué)領(lǐng)袖選擇了看起來最有意思的符號(hào)來描述相當(dāng)直觀的方法。這就導(dǎo)致了一個(gè)結(jié)果:等式和變量看起來比實(shí)際表達(dá)的含義還要復(fù)雜得多。 我發(fā)現(xiàn)代碼不僅能用來寫程序,而且還是用于解釋復(fù)雜問題的全球通用語言。當(dāng)我學(xué)習(xí)數(shù)據(jù)科學(xué)背后的數(shù)學(xué)時(shí),我總是發(fā)現(xiàn)理解數(shù)學(xué)的最佳方式是寫出描述這些等式的代碼段。最終,我理解了這些符號(hào),現(xiàn)在讀它們就像讀一篇普通論文一樣。我希望通過這篇文章分享一些示例,讓大家知道用代碼描述數(shù)學(xué)竟會(huì)如此簡(jiǎn)單! 求和與求積

在迭代數(shù)學(xué)方法中,求和符號(hào)是最有用且最常用的符號(hào)。盡管求和符號(hào)設(shè)計(jì)復(fù)雜,但實(shí)現(xiàn)方法卻非常簡(jiǎn)單,而且也極其有用。

x = [1, 2, 3, 4, 5, 6]result = 0for i in range(6):   

    result += x[i]Output of print(result) -> 21


如前所示,這個(gè)符號(hào)表達(dá)的其實(shí)就是一個(gè)循環(huán)。求和符號(hào)上面的數(shù)字是這個(gè)循環(huán)的范圍,下面的數(shù)字是起始位置。下面的變量集會(huì)變成索引變量,每次循環(huán)的結(jié)果都被加起來,得到一個(gè)總和值。下面的符號(hào)則更少見一些:

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

x = [1, 2, 3, 4, 5, 1]   

result = 1

for i in range(6):    result *= x[i]Output of print(result) -> 120


階乘 階乘的符號(hào)是 !,大多數(shù)計(jì)算器都有這個(gè)功能。對(duì)很多人來說,這個(gè)符號(hào)表達(dá)的含義可能很明顯和直白,但還是值得用代碼來理解其原理。 5! 可以表示成:

result = 1for i in range(1,6):   

    result *= iOutput of print(result) -> 120


條件括號(hào)


條件括號(hào)的作用是基于一組條件來切換所要執(zhí)行的等式。對(duì)于程序員來說,這其實(shí)就是簡(jiǎn)單的 if 語句。上面的條件等式可表示為:

i = 3y = [-2, 3, 4, 1]result = 0if i in y:

    result = sum(y)elif i > 0:    result = 1else:  

    result = 0print(result) -> 6


可以看到,等式右側(cè)括號(hào)中每一行都對(duì)應(yīng)一個(gè)條件以及該條件下所要執(zhí)行的路徑。我還在每個(gè)條件中增加了額外的「屬于」符號(hào),以便提供更多見解。如前所示,我們檢查了 i 值是否在 y 列表中。如果在,則返回?cái)?shù)組的和。如果不在,我們則根據(jù)具體的值返回 0 和 1。 逐點(diǎn)乘法和笛卡爾矩陣乘法 最后,我想快速介紹幾個(gè)任何數(shù)據(jù)科學(xué)家都可以用自己最喜歡的語言庫輕松完成的運(yùn)算——矩陣乘法。理解矩陣乘法的最簡(jiǎn)單方式是逐點(diǎn)運(yùn)算。這可以簡(jiǎn)單地寫成:


注意,首要要求是每個(gè)矩陣都必須形狀一樣(即 # 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]]


最后,我們來看一種典型的矩陣乘法過程,這在機(jī)器學(xué)習(xí)領(lǐng)域非常常用。用復(fù)雜的術(shù)語來說,這個(gè)運(yùn)算的目的是求取每個(gè)主要行與每個(gè)次要列的點(diǎn)積。主要來說是下面的要求:假設(shè) [#rows, #columns] → 矩陣 i x j 要求 #columns(i) == #rows(j) → 最終積的形狀為 [#rows(i), #columns(j)] 這看起來很令人困惑,我最好的建議是搜索一下這些要求的可視化圖片。


這個(gè)等式的代碼如下(使用了 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]]


本文僅給出了少量示例,但理解這些簡(jiǎn)單代碼能讓任何程序員都能踏足乍看之下難以深入的數(shù)學(xué)世界。當(dāng)然,這些方法都可以合并簡(jiǎn)化,實(shí)現(xiàn)更高的效率,而且通常很多軟件庫中都有現(xiàn)成的方法可用。用簡(jiǎn)單代碼寫出這些數(shù)學(xué)符號(hào)的意義在于通過寫出這些等式的真正計(jì)算過程來理解它們的含義。
原文鏈接:https:///understanding-mathematical-symbols-with-code-5aa0c542644本文為機(jī)器之心編譯,轉(zhuǎn)載請(qǐng)聯(lián)系本公眾號(hào)獲得授權(quán)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多