<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python代碼轉(zhuǎn)Latex公式,這個(gè)開源庫用一行代碼幫你搞定

          共 2108字,需瀏覽 5分鐘

           ·

          2020-11-19 20:25

          來源:機(jī)器之心

          數(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é)公式,大概不會(huì)出現(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é)果往往會(huì)影響后續(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 / y  b = 3*a  c = (a + b) / z  return locals()


          @handcalc(left: str = "", right: str = "", jupyter_display: bool = False)


          返回一個(gè)由 (latex_code: str, locals: dict) 組成的元組,其中 locals 是函數(shù)命名空間范圍內(nèi)所有變量的字典。


          其他功能


          有些公式的參數(shù)量較多,如果按照常規(guī)的格式顯示在一列,會(huì)浪費(fèi)大量空間。而使用 handcalcs,只需添加注釋標(biāo)簽# Parameters 就能讓參數(shù)以三列的形式顯示出來:



          而有些公式的計(jì)算過程非常繁瑣,也會(huì)占用大量顯示空間,只需使用標(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ù)雜公式也不在話下,比如含有積分的公式:



          缺陷


          雖然用處多多,但項(xiàng)目作者表示,handcalcs 仍存在一些小缺陷。

          首先,handcalcs 并不適用于 collections 這種數(shù)據(jù)類型,例如 list、tuple、dict 等。

          其次是在變量名方面,handcalcs 是針對 Jupyter 環(huán)境設(shè)計(jì)的。如果在 notebook 上重復(fù)使用變量名,則可能導(dǎo)致錯(cuò)誤的數(shù)學(xué)運(yùn)算。

          handcalcs 雖然有些小瑕疵,但它對開發(fā)者而言頗有幫助。感興趣的話,快來動(dòng)手試一下吧!


          瀏覽 21
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天堂中文在线视频 | 色九九色九九色九九 | 麻豆视频一区二区 | 影音先锋全部av鲁色资源站小说 | 超碰AV无码 |