你是否曾经用 Python 进行过工程或科学计算,最终发现自己迷失或困惑于变量的单位,比如'那是米还是毫米的值'?或者你意识到在某个时刻你添加了一个电流和一个电阻——这是不可能的?就像每个物理老师都说过的一样:你不能把胡萝卜和西红柿加在一起。
physipy 正是为了解决这类问题而存在的。它是一个轻量级的包,允许你非常容易地定义和声明物理单位,并跟踪所有变量的单位。换句话说,你永远不需要在变量后加上相应的单位(例如 my_height_cm 将变成 my_height),如果你试图把胡萝卜和西红柿加在一起,将会抛出一个异常。
physipy 为科学/工程工作提供了很好的功能:它与 NumPy 完美集成,提供了 Pandas 扩展,完整的文档,与 Matplotlib 无缝工作,并为 Jupyter 提供了 (ipy) 小部件。
一次一个示例理解 physipy
在这篇文章中,我们将看到如何使用 physipy,特别是它如何与 NumPy 和 Matplotlib 很好地集成,通过一些基本的示例。
要安装 physipy,您可以使用 pypi 通过简单的命令行:
pip install physipy
或者如果您更喜欢从 GitHub 下载最新版本,您可以在本地下载并解压缩包,或者使用以下命令克隆 git 仓库:
git clone https://github.com/mocquin/physipy
使用 physipy 计算身体质量指数 BMI
如您所知,一个常见的健康指标是身体质量指数。正如维基百科所述:体质指数(BMI)是从一个人的质量(体重)和身高推导出的一个值。BMI 定义为身体质量除以身体高度的平方,并以 kg/m2 的单位表示,由千克(kg)的质量和米(m)的高度组成。
让我们看看没有 physipy 的代码会是什么样子:
# no physipy → we need to keep track of the unit everywhere
my_weight_kg = 75
my_height_m = 1.89
def bmi_calculator(weight_kg, height_m):
"Compute Body-Mass-Index from weight and height."
return weight_kg / height_m**2
print(bmi_calculator(my_weight_kg, my_height_m))
# notice that the output is pure, unit-less number, while it is actually kg-per-meter-squared
# 20.99605274208449
现在让我们看看使用 physipy 的代码是什么样的:
from physipy import kg, m # define physical quantities that are unit aware
my_weight = 75 * kg
my_height = 1.89 * m
def bmi_calculator(weight, height):
"Compute Body-Mass-Index from weight and height."
return weight / height**
(bmi_calculator(my_weight, my_height))

