Python代碼轉(zhuǎn)Latex公式,這個開源庫用一行代碼幫你搞定
機(jī)器之心報道
編輯:小舟
你的代碼中有數(shù)學(xué)公式嗎?
數(shù)學(xué)是數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的重要基礎(chǔ),數(shù)學(xué)運(yùn)算的結(jié)果對于機(jī)器學(xué)習(xí)項目而言是至關(guān)重要的。在編寫代碼時,我們常常需要定義數(shù)學(xué)公式的計算形式。像 S=r^2 這樣簡單的數(shù)學(xué)公式,大概不會出現(xiàn)拼寫錯誤。但如果是下面這樣的公式呢?

圖源:知乎用戶 @馬啃菠籮
還記得數(shù)學(xué)老師密密麻麻的板書嗎?人們習(xí)慣于手寫公式的運(yùn)算過程。而如果計算機(jī)編程語言能夠顯示出類似于手寫公式的計算過程,檢查公式運(yùn)算是否準(zhǔn)確就可以輕松多了吧。
近日,GitHub 上一個名叫 handcalcs 的開源庫就解決了這個問題。
項目地址:https://github.com/connorferster/handcalcs
handcalcs 庫:將 Python 計算代碼轉(zhuǎn)換為 Latex 公式
handcalcs 庫可將 Python 計算代碼自動渲染為 Latex 公式,呈現(xiàn)方式類似于手寫的公式計算:先編寫符號公式,再代入具體數(shù)字,最后得出結(jié)果。

正如上面的演示樣例所示,計算機(jī)能夠識別的公式形式是:

而人們更習(xí)慣的是如下形式的數(shù)學(xué)公式:

handcalcs 的功能就是,將數(shù)學(xué)公式和運(yùn)算過程以人們更容易理解的形式展示出來。
數(shù)學(xué)計算的結(jié)果往往會影響后續(xù)代碼的運(yùn)行過程,而復(fù)雜的數(shù)學(xué)公式更容不得一點錯漏,因此對于包含較多復(fù)雜數(shù)學(xué)公式的 Python 代碼,用 handcalcs 進(jìn)行自查或許是有必要的。
如何使用 handcalcs?
那么,這個開源庫要如何應(yīng)用呢?
基本用法 1:Jupyter 單元格魔法函數(shù)
handcalcs 的設(shè)計初衷是在 Jupyter Notebook 或 Jupyter Lab 中作為單元格魔法函數(shù)來使用。
首先,引入 handcalcs 模塊并運(yùn)行單元格:
import handcalcs.render接下來,在想要使用 handcalcs 的單元格上面添加一行魔法函數(shù) %%render:
%%render例如:
%%rendera = 2b = 3c = 2*a + b/3
如果系統(tǒng)安裝了 Latex 環(huán)境,你還可以將 notebook 導(dǎo)出成 pdf 格式文件。
基本用法 2:函數(shù)裝飾器 @handcalc()
除了在 Jupyter cell 中使用外,在 Python 的函數(shù)中也可以使用 handcalcs。
首先導(dǎo)入 @handcalc() 裝飾器:
from handcalcs.decorator import handcalc然后編寫函數(shù)。注意:函數(shù)必須 return locals():
@handcalc()def my_calc(x, y, z):a = 2*x / yb = 3*ac = (a + b) / zreturn locals()
@handcalc(left: str = "", right: str = "", jupyter_display: bool = False)返回一個由 (latex_code: str, locals: dict) 組成的元組,其中 locals 是函數(shù)命名空間范圍內(nèi)所有變量的字典。
其他功能
有些公式的參數(shù)量較多,如果按照常規(guī)的格式顯示在一列,會浪費大量空間。而使用 handcalcs,只需添加注釋標(biāo)簽# Parameters 就能讓參數(shù)以三列的形式顯示出來:

而有些公式的計算過程非常繁瑣,也會占用大量顯示空間,只需使用標(biāo)簽# Short 就能讓運(yùn)算過程的顯示行數(shù)減少:

反之,如果你比較喜歡推導(dǎo)等式對齊的方式,可以使用# Long 標(biāo)簽顯示。
有時你并不需要代入數(shù)值計算,只需要以符號的形式顯示數(shù)學(xué)計算公式。那么,你需要使用# Symbolic 標(biāo)簽:

handcalcs 的功能本身還可以解決編程中的小問題,即在 Python 中,顯示多個變量的值通常需要多個 print() 語句,而使用 handcalcs 能讓事情變得簡單許多:

很多開發(fā)者喜歡用_表示公式中的下標(biāo),handcalcs 可以將其顯示出來,甚至多級下標(biāo)也可以通過嵌套的形式得到顯示。

數(shù)學(xué)公式中經(jīng)常出現(xiàn)希臘字母(如「pi」、「eta」等),只要在代碼中編寫出對應(yīng)的英文名,比如 alpha、beta,handcalcs 就可以顯示出希臘字母:

不只是簡單的數(shù)學(xué)公式,復(fù)雜公式也不在話下,比如含有積分的公式:

缺陷
