Python中的单位转换

我正在开发一个项目,让用户随着时间的推移跟踪不同的数据types。 部分基本思想是用户应该能够使用他们需要的任何单位input数据。 我一直在看这两个单位:

http://pypi.python.org/pypi/units/

和数量:

http://pypi.python.org/pypi/quantities/

不过,我不确定最好的办法。 从我所知道的情况来看,数量是比较复杂的,但是包含更好的初始单位列表。

我鼓掌在科学计算应用中使用显式的单位。 使用明确的单位是类似的刷牙。 它在前面增加了一些乏味,但从长远来看,您所获得的型式安全可以节省很多麻烦。 比如说, 不要把1.25亿美元的轨道飞机撞上行星 。

你也应该看看这两个python单元/数量包:

UNUM

Scientific.Physics.PhysicalQuantity

我曾经考察过Scientific.Physics.PhysicalQuantity。 这并不完全符合我的需求,但可能会让你满意。 从简要描述中很难判断出您需要哪些function。

我最终编写了我自己的python包进行单位转换和维度分析,但是还没有正确的打包发布。 我们正在使用我的单元系统在python绑定我们的OpenMM系统的GPU加速分子力学。 你可以浏览我的python单元代码的svn仓库:

SimTK python单位

最终我打算把它打包发行。 如果您觉得有趣,请告诉我。 这可能会激励我尽快将其打包。 我在deviseSimTK python单元系统时寻找的function包括:

  1. 单位不一定以国际单位国内单位存储。 这对我来说非常重要,因为我们的一个重要应用领域是分子尺度。 内部使用SI单位会导致常用分子力计算中的指数溢出。 在内部,所有的单元系统在SimTK中同样重要。
  2. 我希望在C ++中的Boost.Units系统具有类似的function和灵活性。 这既是因为我熟悉这个系统,也是因为它是在一大批优秀的工程师的审查下devise的。 Boost.Units是一个制作精良的第二代维度分析系统。 因此,我可能会争辩说,SimTK单位系统是第三代系统:)。 请注意,尽pipeBoost.Units是一个“零开销”系统,没有运行成本,但所有的python数量实现(包括SimTK单元)都可能确定运行时成本。
  3. 我想要尺寸的数量与numpy数组兼容,但不一定需要python numpy包。 换句话说,数量可以基于numpy数组或基于pythontypes构build。

什么function对你很重要?

品脱最近来到这个领域。 有人关心分享他们的经验? 看起来不错。 仅供参考:看起来Pint在不久的将来将与不确定性相结合 。

请注意, quantities对温度的支持很差:

 >>> (100 * pq.degC).rescale(pq.degF) array(179.99999999999997) * degF >>> (0 * pq.degC).rescale(pq.degF) array(0.0) * degF 

0摄氏度不是0华氏度。 他们的框架不支持任何不仅仅是乘以一个因素的转换。

看起来另外一个软件包也出现了,这个软件是由web2py成名的Massimo DiPierro写的,叫白金汉 。

同样值得注意的是, Brian已经有一段时间了。

你可能想看看一个叫做natu的新软件包。 它解决了@ChristopherBruns列出的三个问题。 它在PyPI中可用。

我是该软件包的作者,我很感激任何意见或build议。

我认为你应该使用数量,因为数量有一些与之相关的单位。

例如,压力将是一个可以input和转换成不同单位(Pa,psi,atm等)的数量。 可能您可以为您的应用程序创build新的数量细节。

我很惊讶没有人提到SymPy。 SymPy是一个成熟且维护良好的Python符号math库,而且是NumFOCUS赞助的项目。

它有一个物理模块,有许多有用的类和function,用于“解决物理学中的问题”。 它与你最相关,它有一个单元子模块,包含你需要的一切,我想; 只要阅读优秀的文档。