Python 代碼轉(zhuǎn) Latex 公式,這個(gè)開源庫用一行代碼幫你搞定
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
數(shù)學(xué)是數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的重要基礎(chǔ),數(shù)學(xué)運(yùn)算的結(jié)果對于機(jī)器學(xué)習(xí)項(xiàng)目而言是至關(guān)重要的。在編寫代碼時(shí),我們常常需要定義數(shù)學(xué)公式的計(jì)算形式。像 S=r^2 這樣簡單的數(shù)學(xué)公式,大概不會出現(xiàn)拼寫錯(cuò)誤。但如果是下面這樣的公式呢?

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

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

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

handcalcs 的功能就是,將數(shù)學(xué)公式和運(yùn)算過程以人們更容易理解的形式展示出來。
數(shù)學(xué)計(jì)算的結(jié)果往往會影響后續(xù)代碼的運(yùn)行過程,而復(fù)雜的數(shù)學(xué)公式更容不得一點(diǎn)錯(cuò)漏,因此對于包含較多復(fù)雜數(shù)學(xué)公式的 Python 代碼,用 handcalcs 進(jìn)行自查或許是有必要的。
如何使用 handcalcs?
那么,這個(gè)開源庫要如何應(yīng)用呢?
基本用法 1:Jupyter 單元格魔法函數(shù)
handcalcs 的設(shè)計(jì)初衷是在 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)返回一個(gè)由 (latex_code: str, locals: dict) 組成的元組,其中 locals 是函數(shù)命名空間范圍內(nèi)所有變量的字典。
其他功能
有些公式的參數(shù)量較多,如果按照常規(guī)的格式顯示在一列,會浪費(fèi)大量空間。而使用 handcalcs,只需添加注釋標(biāo)簽# Parameters 就能讓參數(shù)以三列的形式顯示出來:

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

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

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

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

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

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

缺陷
好消息!
小白學(xué)視覺知識星球
開始面向外開放啦??????
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程 在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講 在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。 下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講 在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。 交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

