Python中的单位转换
我正在做一个项目,让用户可以跟踪不同类型的数据随时间的变化。这个项目的基本想法是,用户应该能够使用他们需要的任何单位来输入数据。我在研究两种工具:
http://pypi.python.org/pypi/units/
和
http://pypi.python.org/pypi/quantities/
不过我不太确定该选择哪一个。从我了解的情况来看,quantities 似乎更复杂,但它提供了一个更全面的单位列表。
13 个回答
28
Pint 最近在这个领域出现了。有没有人愿意分享一下他们的使用经验?看起来不错。顺便提一下:Pint 未来将与 Uncertainties 集成。
39
我非常赞同在科学计算中使用明确的单位。使用明确的单位就像刷牙一样,虽然一开始可能有点麻烦,但从长远来看,这种类型的安全性可以避免很多麻烦。比如说,避免把价值1.25亿美元的探测器撞到行星上。
你可能还想看看另外两个Python的单位/量的库:
Scientific.Physics.PhysicalQuantity
我曾经研究过Scientific.Physics.PhysicalQuantity。虽然它没有完全满足我的需求,但可能会适合你。根据你简短的描述,很难判断你需要哪些功能。
最后我自己写了一个Python包,用于单位转换和维度分析,但还没有做好发布的准备。我们在GPU加速的分子力学系统OpenMM的Python绑定中使用了我的单位系统。你可以在这里浏览我的Python单位代码的svn仓库:
我最终打算将它打包以便分发。如果你觉得有趣,请告诉我。这可能会激励我更快地打包。设计SimTK python单位系统时,我寻找的功能包括:
- 单位在内部并不一定以国际单位制(SI)存储。这对我来说非常重要,因为我们一个重要的应用领域是在分子尺度。内部使用SI单位可能会导致在常用的分子力计算中出现指数溢出。在SimTK中,所有单位系统在内部都是同样基础的。
- 我希望有类似于Boost.Units系统的强大和灵活性,因为我对这个系统很熟悉,而且它是在一群优秀工程师的严格审查下设计的。Boost.Units是一个精心制作的第二代维度分析系统。因此,我可以说SimTK单位系统是一个第三代系统 :)。需要注意的是,虽然Boost.Units是一个“零开销”系统,没有运行时成本,但所有Python的量实现,包括SimTK单位,可能会有运行时成本。
- 我希望有维度的量能够与numpy数组兼容,但不一定需要Python的numpy包。换句话说,量可以基于numpy数组或内置的Python类型。
你觉得哪些功能对你来说很重要呢?