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

2021-03-02 視學算法

轉自 | 機器之心

數學是數據科學和機器學習的重要基礎,數學運算的結果對於機器學習項目而言是至關重要的。在編寫代碼時,我們常常需要定義數學公式的計算形式。像 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 模塊並運行單元格:

接下來,在想要使用 handcalcs 的單元格上面添加一行魔法函數 %%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 雖然有些小瑕疵,但它對開發者而言頗有幫助。感興趣的話,快來動手試一下吧!

感謝你的分享,點讚,在看三連↓

相關焦點

  • Python代碼轉Latex公式,這個開源庫用一行代碼幫你搞定
    機器之心報導  編輯:小舟  你的代碼中有數學公式嗎?  數學是數據科學和機器學習的重要基礎,數學運算的結果對於機器學習項目而言是至關重要的。在編寫代碼時,我們常常需要定義數學公式的計算形式。像 S=r^2 這樣簡單的數學公式,大概不會出現拼寫錯誤。
  • 不會用latex寫公式? 看看這個python轉latex的庫
    代碼轉latex公式的庫一. python2latex相信大家都用latex編輯過自己的論文,但是對於一些比較複雜的公式,在latex的代碼中會比較複雜,對於初學者有一定難度,而這個庫可以把python下的數學公式轉換成latex代碼和公式,對於初學者會有非常大的幫助。
  • 1行Python代碼搞定Latex公式編寫
    在Python語法基礎上,將計算公式呈現為LaTeX格式,只需要加一行代碼。沒錯,這行代碼就是%%render。也就是說,如果你想要生成LaTeX公式,只需要在計算公式前加個%%render。不僅如此,Python還會自動幫你計算出結果。
  • 查閱arXiv論文新神器,一行代碼比較版本差別,Github新開源!
    查閱arXiv論文新神器,一行代碼比較版本差別,Github新開源!Github上的一個比較預印本論文版本差別的工具也許能幫到你,而且只需一行代碼就能實現。使用教程運行這個工具你需要安裝PyPI包、以及帶有pdflatex和latexdiff的文本分布工具。
  • 1行代碼搞定Latex公式編寫,這個4.6M的Python小插件,寫論文神器
    基礎版:公式+計算裝上handcalcs插件後,Python就從一個無情的計算器,升級成了華麗的公式生成器。在Python語法基礎上,將計算公式呈現為Latex格式,只需要加一行代碼。沒錯,這行代碼就是%%render。也就是說,如果你想要生成Latex公式,只需要在計算公式前加個%%render。不僅如此,Python還會自動幫你計算出結果。
  • Python一行代碼,能玩這麼多童年的遊戲?
    來源 | 早起 Python責編 | Carol封圖 | CSDN 下載自視覺中國兒童節就要來了,雖然禿頭程式設計師沒有頭髮,但是童心還是一直都在的,今天就分享一個私藏的GitHub項目——free-python-games,一行代碼就能進入使用Python開發的小遊戲快樂玩耍!
  • 慢步python,說說import,引用功能代碼(功能庫、py文件代碼)
    今天想說說importimport是python語言的保留字,它能實現引用當前程序之外已有的功能代碼。python語言像積木,你可以根據你想要的功能,編寫一系列的代碼。比如筆者之前編寫的《word文檔標題置換》。
  • 1 行代碼搞定 Latex 公式編寫,這個 4.6M 的 Python 小插件,堪稱論文必備神器
    在Python語法基礎上,將計算公式呈現為Latex格式,只需要加一行代碼。沒錯,這行代碼就是%%render。也就是說,如果你想要生成Latex公式,只需要在計算公式前加個%%render。不僅如此,Python還會自動幫你計算出結果。
  • Markdown與LaTeX公式的使用入門指南
    這個操作主要是讓 $ 符號之間的latex代碼可以直接被渲染為公式,比較方便。單獨起一行的公式,語法為在公式上、下兩行加上兩個$符號。$$y=kx+b\tag{2}\label{eq:linear}$$標記好這個公式之後,再用\eqref命令就可以引用這個公式了。
  • 幾行代碼搞定ML模型,低代碼機器學習Python庫正式開源
    想提高機器學習實驗的效率,把更多精力放在解決業務問題而不是寫代碼上?低代碼平臺或許是個不錯的選擇。最近,機器之心發現了一個開源低代碼機器學習 Python 庫 PyCaret,它支持在「低代碼」環境中訓練和部署有監督以及無監督的機器學習模型。
  • [LaTeX常用庫]公式
    %數學字體1.1 最簡單的公式-效果圖1.2 最簡單的公式-代碼這是一種最簡單的公式,公式內容只有一行,最後跟一個序號。\begin{equation}\label{這裡寫標籤名}y=kx+b % 這裡寫代碼即可\end{equation}2.1 多行公式-效果圖
  • 使用一行Python代碼從圖像讀取文本
    雖然圖像分類和涉及到一定程度計算機視覺的任務可能需要大量的代碼和紮實的理解,但是從格式良好的圖像中讀取文本在Python中卻是簡單的,並且可以應用於許多現實生活中的問題。在今天的帖子中,我想證明這一點。雖然會安裝一些庫,但不會花很多時間。
  • 一行代碼實現Python並行處理
    而且往往隔靴搔癢,沒有深入探討日常工作中最有用的內容。mltiprocessing 庫的線程版克隆?這是蝦米?即便在 multiprocessing 庫的官方文檔裡關於這一子庫也只有一句相關描述。而這句描述譯成人話基本就是說:"嘛,有這麼個東西,你知道就成."相信我,這個庫被嚴重低估了!
  • 用一行python代碼輕鬆解決,沒想到它這麼強
    python無所不能,是python之父GuidovanRossum的一個朋友說的。而python有多無所不能呢?下面羽憶教程為你展示一行python代碼可以做到輸出九九乘法表,甚至更多喪心病狂的事情,用python一行代碼統統搞定。
  • 代碼又長又複雜?總結Python一行代碼就能幹的事兒,不能更簡單了
    print('我愛你'[::-1])一行代碼輸出當前農曆年份print('猴雞狗豬鼠牛虎兔龍蛇馬羊'[2020%12])將12生肖按固定順序排好形成一個字符串,再用切片的方法獲取其中一個值,對當前年份數字進行12取模得到的數字就是12生肖字符串的元素下標地址
  • 公式免費轉 LaTex 代碼,截圖轉換一氣呵成,每月 1000 次全免費
    選自GitHub參與:一鳴LaTex 是很多人在寫論文時使用的方便工具,但是如何將書本上的公式直接轉換為 LaTex 格式呢?近日,一位中國開發者開源了這樣一款工具。用戶可以對圖片上的公式截圖,然後用工具直接轉換。
  • 5種方法,加密你的Python代碼
    其中一個缺點,讓不少開發者頭疼不已,由於Python解釋器開源的關係,導致Python代碼無法加密,代碼的安全性得不到保障。當然,想要加密Python代碼,也並非無解。最常見的加密方式有4種,還有1種獨特的加密方式。
  • 手把手教你用python搶票回家過年 !(附代碼)
    本文教大家用Python寫出搶火車票代碼以及實戰。首先看看如何快速查看剩餘火車票?當你想查詢一下火車票信息的時候,你還在上12306官網嗎?或是打開你手機裡的APP?下面讓我們來用Python寫一個命令行版的火車票查看器, 只要在命令行敲一行命令就能獲得你想要的火車票信息!如果你剛掌握了Python基礎,這將是個不錯的小練習。接口設計一個應用寫出來最終是要給人使用的,哪怕只是給你自己使用。所以,首先應該想想你希望怎麼使用它?
  • LaTeX寫公式很強?Python:我也行!
    真心不想用啊,寫論文就夠令人頭疼了,沒想到,最難的是編輯超長的公式。最近 GitHub 上出現了一個開源項目 latexify_py,它使用 Python 就能生成 LaTeX 數學公式,分分鐘甩 Word 幾條街。沒想到編輯公式變得如此簡單!
  • 小叮噹Python人工智慧篇:一句代碼搞定圖文識別!
    」中已為大家介紹了如何安裝下載圖文識別開源引擎以及所需的安裝包的配置。在tesseract4.0引擎及語言包已配置好的前提下,我們就用一句代碼通過python來實現人工智慧中的圖文識別。同樣在python中也是這樣,想要一句代碼實現圖文識別,想要一勞永逸,我們得把準備工作給做充分。僅僅安裝好圖文識別tesseract4.0引擎及相應的語言包是還不夠的。我們還需安裝兩個庫pytesseract和PIL。