日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员的数学_数学公式太晦涩,不如用代码写出来:这是程序员学数学的独特方式...

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员的数学_数学公式太晦涩,不如用代码写出来:这是程序员学数学的独特方式... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

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

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

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

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

求和與求積

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

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


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

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

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

階乘

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

5! 可以表示成:

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

條件括號

條件括號的作用是基于一組條件來切換所要執(zhí)行的等式。對于程序員來說,這其實就是簡單的 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è)括號中每一行都對應一個條件以及該條件下所要執(zhí)行的路徑。我還在每個條件中增加了額外的「屬于」符號,以便提供更多見解。如前所示,我們檢查了 i 值是否在 y 列表中。如果在,則返回數(shù)組的和。如果不在,我們則根據(jù)具體的值返回 0 和 1。

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

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

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

最后,我們來看一種典型的矩陣乘法過程,這在機器學習領(lǐng)域非常常用。用復雜的術(shù)語來說,這個運算的目的是求取每個主要行與每個次要列的點積。主要來說是下面的要求:假設 [#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]]

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

我目前是在職Java開發(fā),如果你現(xiàn)在正在了解Java技術(shù),想要學好Java,渴望成為一名Java開發(fā)工程師,在入門學習Java的過程當中缺乏基礎的入門視頻教程,你可以關(guān)注并私信我:01。我這里有一套最新的Java基礎JavaSE的精講視頻教程,這套視頻教程是我在年初的時候,根據(jù)市場技術(shù)棧需求錄制的,非常的系統(tǒng)完整。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的程序员的数学_数学公式太晦涩,不如用代码写出来:这是程序员学数学的独特方式...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。