Python代碼轉Latex公式,這個開源庫用一行代碼幫你搞定

2021-01-11 機器之心Pro

機器之心報導

編輯:小舟

你的代碼中有數學公式嗎?

數學是數據科學和機器學習的重要基礎,數學運算的結果對於機器學習項目而言是至關重要的。在編寫代碼時,我們常常需要定義數學公式的計算形式。像 S=r^2 這樣簡單的數學公式,大概不會出現拼寫錯誤。但如果是下面這樣的公式呢?

圖源:知乎用戶 @馬啃菠籮

還記得數學老師密密麻麻的板書嗎?人們習慣於手寫公式的運算過程。而如果計算機程式語言能夠顯示出類似於手寫公式的計算過程,檢查公式運算是否準確就可以輕鬆多了吧。

近日,GitHub 上一個名叫 handcalcs 的開源庫就解決了這個問題。

項目地址:https://github.com/connorferster/handcalcs

handcalcs 庫:將 Python 計算代碼轉換為 Latex 公式

handcalcs 庫可將 Python 計算代碼自動渲染為 Latex 公式,呈現方式類似於手寫的公式計算:先編寫符號公式,再代入具體數字,最後得出結果。

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

而人們更習慣的是如下形式的數學公式:

handcalcs 的功能就是,將數學公式和運算過程以人們更容易理解的形式展示出來。

數學計算的結果往往會影響後續代碼的運行過程,而複雜的數學公式更容不得一點錯漏,因此對於包含較多複雜數學公式的 Python 代碼,用 handcalcs 進行自查或許是有必要的。

如何使用 handcalcs?

那麼,這個開源庫要如何應用呢?

基本用法 1:Jupyter 單元格魔法函數

handcalcs 的設計初衷是在 Jupyter Notebook 或 Jupyter Lab 中作為單元格魔法函數來使用。

首先,引入 handcalcs 模塊並運行單元格:

import handcalcs.render

接下來,在想要使用 handcalcs 的單元格上面添加一行魔法函數 %%render:

%%render

例如:

%%rendera = 2b = 3c = 2*a + b/3

如果系統安裝了 Latex 環境,你還可以將 notebook 導出成 pdf 格式文件。

基本用法 2:函數裝飾器 @handcalc()

除了在 Jupyter cell 中使用外,在 Python 的函數中也可以使用 handcalcs。

首先導入 @handcalc() 裝飾器:

from handcalcs.decorator import handcalc

然後編寫函數。注意:函數必須 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)

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

其他功能

有些公式的參數量較多,如果按照常規的格式顯示在一列,會浪費大量空間。而使用 handcalcs,只需添加注釋標籤# Parameters 就能讓參數以三列的形式顯示出來:

而有些公式的計算過程非常繁瑣,也會佔用大量顯示空間,只需使用標籤# Short 就能讓運算過程的顯示行數減少:

反之,如果你比較喜歡推導等式對齊的方式,可以使用# Long 標籤顯示。

有時你並不需要代入數值計算,只需要以符號的形式顯示數學計算公式。那麼,你需要使用# Symbolic 標籤:

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

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

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

不只是簡單的數學公式,複雜公式也不在話下,比如含有積分的公式:

缺陷

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

首先,handcalcs 並不適用於 collections 這種數據類型,例如 list、tuple、dict 等。

其次是在變量名方面,handcalcs 是針對 Jupyter 環境設計的。如果在 notebook 上重複使用變量名,則可能導致錯誤的數學運算。

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

相關焦點

  • 1行代碼搞定Latex公式編寫,這個4.6M的Python小插件,寫論文神器
    基礎版:公式+計算裝上handcalcs插件後,Python就從一個無情的計算器,升級成了華麗的公式生成器。在Python語法基礎上,將計算公式呈現為Latex格式,只需要加一行代碼。沒錯,這行代碼就是%%render。也就是說,如果你想要生成Latex公式,只需要在計算公式前加個%%render。
  • 使用一行Python代碼從圖像讀取文本
    這些是你需要的庫:OpenCVPyTesseractOpenCV現在,這個庫將只用於加載圖像,實際上你不需要事先對它有太多了解(儘管它可能有幫助,你將看到為什麼)。OpenCV是bsd許可的產品,OpenCV使企業可以輕鬆地使用和修改代碼簡而言之,你可以使用OpenCV來做任何類型的圖像轉換,這是一個相當簡單的庫。
  • 查閱arXiv論文新神器,一行代碼比較版本差別,Github新開源!
    Github上的一個比較預印本論文版本差別的工具也許能幫到你,而且只需一行代碼就能實現。使用教程運行這個工具你需要安裝PyPI包、以及帶有pdflatex和latexdiff的文本分布工具。對於Linux系統,可以通過運行這個指令來安裝文本分布工具:sudo apt-get install texlive-fullMacOS系統通過這個指令安裝:brew cask install mactex前提是你已經安裝過了Homebrew。
  • 論文繪圖神器:一行代碼繪製不同期刊格式圖表,哈佛博士後開源
    賈浩楠 發自 凹非寺量子位 報導 | 公眾號 QbitAI「一篇論文投多個期刊,每個期刊對圖表格式要求不一,同一組數據要用多種工具分別繪圖。」不光是你,哈佛大學天文研究所的博士後,也不堪忍受論文重複繪圖之苦。
  • 一行Python代碼寫階乘函數
    背景我以前用Dart寫過一行的階乘函數:fact(double n) => n < 0 ? throw ('n must be bigger than 0') : n == 0 ?1 : n * fact(n - 1);現在突(xián)發(zhe)奇(méi)想(shì),用Python寫。貌似網上還沒有這樣的例子,所以我就發出來了。要求使用一行代碼編寫函數。調用方式為fact(x),其中x為要求階乘的數。不得使用分號以變相湊成一行。
  • 寫下LaTeX代碼就要看結果?這款編輯器讓你「所見即所得」
    它通過代碼的形式,讓寫出來的報告和論文保持良好的格式,因此受到歡迎。LaTeX 有一個小小的缺點——寫好的 LaTeX 代碼並不能夠立刻表現為真實的排版效果。近日,GitHub 出現了一個新的項目,是一個名為 SwiftLaTeX 的可視化編輯器。該項目最大的亮點在於:你編寫的 LaTeX 代碼能夠立刻展示實際的效果,所見即所得。這個編輯器還是基於瀏覽器的,還支持雲文件存儲。
  • 教你如何使用Python的27萬代碼庫
    Python代碼那麼多,怎麼拿來用你知道嗎?在Python有個巨大的寶庫PyPI,裡面有27萬開源的模塊供大家使用。很多讓你苦思冥想的功能,其他大神早就寫出來了。甚至不要copy粘貼,只要import下就能用了。PyPI是什麼?
  • 這款Python 庫 4行代碼搞定!
    這算是生活裡最常見、最有用的AI應用技術之一。關於EasyOCRPython中有一個不錯的OCR庫-EasyOCR,在GitHub已有9700star。它可以在python中調用,用來識別圖像中的文字,並輸出為文本。
  • 這幾個常用的python庫你需要知道
    python可以說是近幾年最火熱、最實用的、最容易上手的工具之一了。功能強大、應用廣泛,可以幫你搜集工作數據,還能幫你下載音樂,電影,於是就掀起了一波學習python的大潮,小編也毫不猶豫的加入了。但是對於向小編一樣的小白來說,剛開始學習還是有些困難的,需要首先了解python的一些基礎知識。所以小編就整理了一些常用的python庫,希望對正在學習python的小夥伴有所幫助。1.MatplotlibMatplotlib是一個用於創建二維圖和圖形的底層庫。
  • python是什麼:Python相關內容了解
    用Python開發,許多功能不必從零編寫,直接使用現成的即可。除了內置的庫外,Python還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。當然,如果你開發的代碼通過很好的封裝,也可以作為第三方庫給別人使用。許多大型網站就是用Python開發的,例如YouTube、Instagram,還有國內的豆瓣。
  • 一行代碼的大用處!看到最後一個我終於忍不住了...
    傳智播客博學谷微信號:boxuegu-get最新最全的IT技能免費領取各種視頻資料俗話說得好:兩個黃鸝鳴翠柳,一行代碼上青天!就一行你想讓我幹啥?一行代碼畫個愛心print('\n'.join([''.join([('Love'[(x-y) %len('Love')]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3一行代碼輸出Mandelbrot圖像print('\n'.join([''.join
  • 10行Python代碼也能實現,親測好用!
    大數據文摘出品編譯:朱一輝、雪清、小魚短短10行代碼就可以實現目標檢測?!本文作者和他的團隊構建了一個名為ImageAI 的Python庫,集成了現今流行的深度學習框架和計算機視覺庫。本文將手把手教你構建自己的第一個目標檢測應用,而且文摘菌已經幫你踩過坑了,親測有效!
  • Python的一行代碼有何魅力?lambda匿名函數都自嘆不如
    Python學起,接觸這個語言的人對Python這種簡潔的代碼編寫方法都愛不釋手。其中,一行代碼編寫與lambda表達式是最具代表性的方法,下面分別來介紹一行代碼編寫和lambda表達式的代碼之美。一行代碼我們都知道,創建列表的方式有多種,比如直接定義、使用list()函數轉換、使用for循環迭代輸出等等。
  • python基礎教程之python是什麼?
    當你用一種語言開始作真正的軟體開發時,你除了編寫代碼外,還需要很多基本的已經寫好的現成的東西,來幫助你加快開發進度。比如說,要編寫一個電子郵件客戶端,如果先從最底層開始編寫網絡協議相關的代碼,那估計一年半載也開發不出來。
  • 程式設計師的樂趣,生成自定義二維碼,5行Python代碼就搞定
    make(fit=True) 函數確保整個二維碼都被用到,即使輸入數據能用更少的像素塊存儲也是如此。最後一步是將其轉換為圖像文件並存儲。make_image 函數可以用來指定圖像中的前景色和背景色。在此二維碼中分別用了黑色和白色,但也可以根據個人喜好改變顏色。save 函數將圖像存儲為當前目錄下的. png 文件。
  • 以VON CHAIN為例,技術小白怎麼看懂黑貓Github開原始碼庫?
    作為一個早期便接觸區塊鏈技術,目前已從業8年的區塊鏈程式設計師,經常會碰到各種各樣的朋友跑來問:「這個項目技術好不好,那個項目水平行不行」。其實啊,要判斷一個項目是不是真的有技術實力並沒有大家想像中那麼難,你只要在它們公開的Github開原始碼庫中查看幾個數據,項目大概的開發水平也心裡有數了。
  • 調包俠神器2.0發布,Python機器學習模型搭建只需要幾行代碼
    蕭簫 發自 凹非寺量子位 報導 | 公眾號 QbitAIPython開源機器學習建模庫PyCaret,剛剛發布了2.0版本。這款堪稱「調包俠神器」的模型訓練工具包,幾行代碼就能搞定模型編寫、改進和微調。從數據預處理到模型效果對比,PyCaret都能自動實現。所以,PyCaret長啥樣,2.0的版本又做了什麼改進?
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    另一方面,pandas 分析函數使用 df.profile_report()擴展 pandas 數據幀,以便快速進行數據分析。它用一行代碼顯示了大量信息,在交互式 HTML 報告中也顯示了這些信息。對於給定的數據集,pandas 分析包計算以下統計信息:
  • 繼斯瓦爾巴全球種子庫,承載著人類歷史的開原始碼也存放到了北極
    種子庫看起來就像電影裡的某個場景,它的入口是一個三角形方尖碑,高高地聳立在一片白茫茫之中。它閃爍著綠光。這是北極世界檔案館,種子庫的堂兄可沒那麼性感。弗裡德曼用一把簡單的門鑰匙打開了貨櫃門,然後在裡面存放了世界上大部分的開源軟體代碼。伺服器和快閃記憶體驅動器不夠耐用,因此數據被編碼在看起來像老式電影膠捲的東西上,每個重幾磅,儲存在一個披薩盒大小的白色塑料容器中。它基本上是縮微膠片。
  • 數學公式編輯神器——LaTeX
    LaTeX的幾個優點:排版質量高,數學公式精美格式自動處理,版式、樣式、字體、對齊等格式,無需手動修改參考文獻的創建和管理可擴展,允許用戶對功能進行擴充和新增安全穩定靈活具備註釋功能免費開源LaTeX的編輯與編譯過程如圖