從 Python 遷移到 Wolfram 語言的經驗教訓

從 Python 遷移到 Wolfram 語言的經驗教訓

從 Python 遷移到 Wolfram 語言的經驗教訓的圖1

從 Python 遷移到 Wolfram 語言的經驗教訓的圖2

自從我開始在 Wolfram 工作,我幾乎一直在使用 Mathematica,不僅作為計算軟件,而且作為編寫文檔的程序。我很快就在這兩種功能中熟練使用 Mathematica,但我還沒有真正將它用作Wolfram 語言的編程平臺。

我在高中時發現了 Wolfram,我當時——現在仍然如此!——對 Wolfram|Alpha 的自然語言能力和知識庫著迷。這種興趣一直持續到大學,在大學我接受了 Python 和 Java 的經典培訓,但繼續將 Wolfram|Alpha 用于數學和化學。我的本科研究要求我學習 bash 腳本和 Tcl,期間我繼續使用 Python。

在我攻讀博士學位的第一學期,我在研究生院的高級量子力學課程中接觸了 Mathematica。我的博士研究小組的研究科學家是一個強大的 Mathematica 用戶,建議我用他的 Mathematica 筆記本仔細檢查最初使用 Python 分析的結果。盡管我在攻讀博士學位期間多次接觸 Mathematica,但我從未想過 Wolfram 語言可以與 Python 相媲美,直到我開始在 Wolfram 工作時才意識到它可以用于“實際”編程。

所以一個星期六,我坐在我的電腦前,通過重寫我本科計算機導論課程的作業來弄清楚 Wolfram 語言的功能。我可以在 Wolfram 語言中快速鏡像我的本科 Python 代碼,但最終學到了兩條非常重要的經驗:

  • Wolfram 語言在利用其優勢編寫的代碼而不是鏡像其他語言使用的編程風格時效果最佳。

  • Wolfram 語言與其他語言相比具有優勢,因為它內置了對動態、真實世界數據的訪問。

我的第一個Python項目

作為一名本科生,我使用 Python 的第一個項目是編寫蒙特卡羅模擬,該模擬基于一組先前的示例回報來估計簡單的投資回報。

在這個任務中,我們必須:

  • 用 Python 編寫蒙特卡羅模擬

  • 將代碼的輸出導入 R

  • 在 R 中分析我們的模擬

  • 寫一篇關于我們的模擬和結果的討論

當用 Wolfram 語言重做這個項目時,我決定將 Python 配置為我的 Mathematica 包運行。所以我按照這些說明在 Mathematica 中配置 Python。這個過程讓我可以使用我的代碼并評估它的可比速度。

現在,讓我帶您完成這項任務。第一步是為 2004 年和 2014 年之間的投資回報率列表分配一個變量。這個任務對兩種編程語言都很簡單,但在 Wolfram 語言中,我們可以直接從 Wolfram 知識庫中提取實際的投資回報數據:

從 Python 遷移到 Wolfram 語言的經驗教訓的圖3

任務的下一步是創建您自己的函數來計算平均值和標準差,并從由該平均值和標準差定義的正態分布中采樣一個隨機值。在用 Wolfram 語言編寫這些自創函數時,我發現了四個最佳實踐:

  • 與 Python 中的 # 或""相比,Wolfram 語言中的注釋是使用(* *)創建的。您還可以突出顯示一段代碼輸入并使用快捷鍵 Alt (或 macOS 上的 Command )進行注釋。

  • For 循環和 While 循環不是 Wolfram 語言中循環的最佳方法。相反,使用TableMap或其他 Wolfram 函數來加速您的代碼。

  • 不要將您自己創建的 Wolfram 語言函數的首字母大寫,因為 Wolfram 定義的函數都是使用駝峰命名的。此外,切勿在函數名稱中使用,因為這表示 Wolfram 語言中的模式序列。

  • 在 Wolfram 語言中定義多個函數時,使用一系列不同的迭代變量(即l等)或使用Module函數。這樣,如果您調用多個自創函數,迭代變量就不會無意中混淆。

這是我本科時用 Python 編寫的一些示例代碼:

從 Python 遷移到 Wolfram 語言的經驗教訓的圖4

這是我最近寫的可比較的 Wolfram 語言版本:

從 Python 遷移到 Wolfram 語言的經驗教訓的圖5

任務的下一步是編寫蒙特卡羅模擬。(完整的代碼示例可在我的示例 Monte Carlo 模擬項目附錄中找到。)當我第一次用 Wolfram 語言起草這個程序時,我基本上逐字重寫了我的 Python 代碼、For 循環等。因此,當我運行蒙特卡羅模擬時(高級 Wolfram 語言用戶會理解),即使模擬只有 1000 個點,花費的時間也明顯比我預期的要長。

正是在這一點上,我意識到 Wolfram 語言與其他口語和手語類似,具有多種構造句子的方法,并且它需要不同的結構來編程。當您有另一種計算語言的背景時,不要認為這種語言與您知道并習慣使用的另一種編程語言的工作方式相似,這一點很重要。 

當我重寫 Wolfram 語言代碼使其不是我的迭代 Python 代碼風格的逐字副本時,我的蒙特卡羅模擬在速度上與我的原始 Python 代碼示例相當。

任務的最后一步在 Wolfram 語言中很容易:創建直方圖并從我的蒙特卡羅模擬輸出中獲取均值、標準差以及上下 5% 分位數。(對于我的本科作業,所有這些任務都是在 R 和 Python 中執行的,因為在 Python 中創建數字和執行統計對于入門計算課程來說太困難和復雜了。)ta

從 Python 遷移到 Wolfram 語言的經驗教訓的圖6

從 Python 遷移到 Wolfram 語言的經驗教訓的圖7

反思這次經歷

在單個軟件中對每一個 Wolfram 語言函數進行編程并分析數據非常方便強大。我還花時間簡要地重寫了關于我的結果的“討論”。教過多門課——并為大量的作業評分!——作為整個研究生院的助教,我對老師們在評分和審查學生作業時所做的所有工作更加感激。我記得有很多學生在這門本科計算機科學課程中忘記提交他們項目的討論部分,因為它是獨立于 Python 和 R 代碼的文檔。 

Mathematica 在 notebook 界面中集成了代碼和排版,可以幫助防止諸如討論部分未附加到項目代碼中的問題。此外,Mathematica 現在支持的一個重要功能是 Mathematica Online的集成,它使用 Wolfram Cloud。許多大學和學院現在都支持 Mathematica 和 Mathematica Online。這讓您和其他人可以通過 Web 瀏覽器、手機或平板電腦訪問它,還可以更輕松地共享和發布文檔。我可以很容易地看到這個作業的新版本:

“使用以下命名約定:Comp_Sci_100_StudentLastName_Proj1.”

將您完成的 Mathematica 筆記本(代碼、結果和討論)分享到*在此處插入教師電子郵件*”

當學生與他們共享筆記本時,教授的 Wolfram Cloud 將發送通知。教職員工可以將筆記本分類到適當的文件夾中,并在準備為作業評分時打開它。

深入了解這些計算的時間和速度

我進行了多個測試來比較 Wolfram 語言和 Python 中不同編程風格的效果來創建這個博客,并將計算分成兩個表。所有這些計算都是在 Mathematica 中執行的,Python 計算是在 Mathematica 中使用 Python 的外部會話執行的。

第一列顯示了我所描述的迭代編程風格的緩慢時間。(這種風格也稱為過程式編程。)第二列介紹了用戶定義的函數式編程。這是我使用 Table 或 Map 作為循環函數而不是 For 循環的時候,并遵循了前面提到的 Wolfram 語言中的四個最佳實踐。我僅使用內置函數(而不是自創函數)為實現此蒙特卡羅模擬進行了最后一次速度測試。在我的附錄中,我還包含了兩種額外的 Python 編程風格的代碼,這兩種編程風格的時序都與這種內置函數風格相似:

從 Python 遷移到 Wolfram 語言的經驗教訓的圖8

表1:以毫秒為單位的 Wolfram 計時


從 Python 遷移到 Wolfram 語言的經驗教訓的圖9

表 2:以毫秒為單位的 Python 計時

(一些注意事項:所有計算均在 Mathematica 中執行。三次重復值的平均值顯示在相應表格的每個框中。Python 計算是使用 Mathematica 中的外部會話執行的。淺藍色背景用于表示最快的時間. 計時使用 Wolfram 的 AbsoluteTiming函數計算,類似的方法用于 timeit 函數和 Python 3.9 版。)

如上表所示,迭代式編程是最慢的。比較單一語言中的不同編程風格,Wolfram 語言在速度上有更大的差異。盡管這種時間差異在 Python 語言中很明顯,但并沒有那么顯著。對于新程序員來說,用 Wolfram 語言編程時這種最初的緩慢速度可能是一種威懾。然而,正如所有程序員都學會以更高效和有效的方式編寫代碼一樣,與編程風格相關的速度的顯著提高在 Wolfram 語言中更為明顯。從這些表中,很明顯 Wolfram 語言在速度上可與 Python 等其他解釋型語言相媲美。

對于我們這些接受過 Python 和其他計算語言經典訓練的人來說,如果我們嘗試像其他語言一樣構建代碼,Wolfram 語言可能看起來很慢。然而,如果我們退后一步重新考慮我們的代碼和我們正在使用的函數,Wolfram語言具有相當的速度和可供探索的大量功能。這些功能還可以使靜態作業本質上是動態的,讓學生能夠使用真實世界的數字和數據探索概念。學習 Wolfram 語言就像學習任何外語一樣:必須始終考慮語法和措辭。

購買軟件/免費試用

【13.2.1中英文 Wolfram 軟件】
請評論留言申請

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

3
2
1