视学算法报道

编辑:小舟

转载自公众号:机器之心

你的代码中有数学公式吗?

数学是数据科学和机器学习的重要基础,数学运算的结果对于机器学习项目而言是至关重要的。在编写代码时,我们常常需要定义数学公式的计算形式。像 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

例如:

%%render
a = 2
b = 3
c = 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 / yb = 3*ac = (a + b) / zreturn 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 虽然有些小瑕疵,但它对开发者而言颇有帮助。感兴趣的话,快来动手试一下吧!

© THE END

转载请联系本 机器之心 众号获得授权

投稿或寻求报道:content@jiqizhixin.com

Python代码转Latex公式,这个开源库用一行代码帮你搞定相关推荐

  1. Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定

    转自 | 机器之心 数学是数据科学和机器学习的重要基础,数学运算的结果对于机器学习项目而言是至关重要的.在编写代码时,我们常常需要定义数学公式的计算形式.像 S=r^2 这样简单的数学公式,大概不会出 ...

  2. python识别latex公式_Python代码转Latex公式,这个开源库用一行代码帮你搞定

    来源:机器之心 数学是数据科学和机器学习的重要基础,数学运算的结果对于机器学习项目而言是至关重要的.在编写代码时,我们常常需要定义数学公式的计算形式.像 S=r^2 这样简单的数学公式,大概不会出现拼 ...

  3. Python 开源库及示例代码

    Python 开源库及示例代码 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) ...

  4. 一文详细分析公式树开源库

    摘要:公式树模块的作用是,从训练集X和function_set中进行随机采样,生成一棵公式树,同时提供子树变异. crossover.hoist变异和点变异的方法. 本文分享自华为云社区<公式树 ...

  5. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  6. Python数据分析:异常值检验的两种方法 -- Z 分数 上下分位点(放入自写库,一行代码快速实现)

    本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "异常值" ,即可获取本文的案例示范与包含详细注释的源 ...

  7. Python 数据可视化:Stack Graph 堆叠图,标准化堆叠柱形图,标准化的同时还能反应数据量大小的堆叠图(放入自写库,一行代码搞定复杂细节绘图)

    本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "堆叠图" ,即可获取本文的案例示范与包含详细注释的源 ...

  8. Python3,爬虫有多简单,一个库,一行代码,就OK, 你确定不来试试?

    爬虫进阶库:Scrapeasy 1. 引言 2.Scrapeasy 2.1 简介 2.1.1 Scrap 2.1.2 Scrapeasy 2.2 安装 2.3 代码示例 3.总结 1. 引言 小屌丝: ...

  9. python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定

    要说微信最让人恶心的发明,消息撤回绝对能上榜. 比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于 ...

最新文章

  1. SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并
  2. 中文输入法切换ubuntu_切换到 Linux 工作,体验暴增 100 倍!
  3. 使用CFree调用Win32 LoadLibrary 简单示例
  4. Java 中引用类型
  5. YbtOJ#482-爬上山顶【凸壳,链表】
  6. java中bmi的制作_Axure教程:在线BMI计算器制作
  7. solr5 导入oracle,Solr7使用Oracle数据源导入+中文分词
  8. asp.net mvc使用mysql_如何使用MySQL设置ASP.NET MVC 2?
  9. linux 计算标准差,Azure Linux VM 的计算基准测试分数 - Azure Virtual Machines | Microsoft Docs...
  10. python函数回顾:abs()
  11. 需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?...
  12. 数据库原理(一)—— 关系代数(二)
  13. 用html5制作机柜,基于HTML5 Canvas 点击添加 2D 3D 机柜模型
  14. 计算机视觉实战(十一)Scale Invariant Feature Transform(SIFT)(附完整代码)
  15. materialize框架select使用JavaScript添加option注意事项
  16. HTML5标准制定完成,浏览器大战能消停吗?
  17. autocad 注册表
  18. 大厂程序员因厌恶编程,辞去月薪2w+的工作去当司机?
  19. Spark - Core 随笔
  20. 动态图 vs 静态图

热门文章

  1. 技术图文:如何利用 Turtle 绘制一棵漂亮的樱花树
  2. 手把手带你打造一款 签名设计 的GUI图形界面!
  3. Openpose+Tensorflow 这样实现人体姿态估计 | 代码干货
  4. Arm 十年重磅发布 v9 架构,不受 EAR 约束,未来将覆盖 3000 亿颗芯片
  5. 一口一个,超灵活的Python迷你项目
  6. 四款5G版iPhone 12齐发,苹果股价却应声而跌
  7. 数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人
  8. 近期必读的6篇NeurIPS 2019零样本学习论文
  9. 10分钟搭建你的第一个图像识别模型 | 附完整代码
  10. 空字符串计数、让字典可排序...Python冷知识(五)