用于处理带有单位的 numpy 数组的包
项目描述
统一
用于处理带有单位的 numpy 数组的包。
通常编写处理具有单位的数据的代码可能会令人困惑。一个函数可能会返回一个数组,但至少对于普通的 NumPy 数组来说,在不知道先验的情况下,无法轻松判断数据的单位是什么。
unyt包(读作“unit”)提供了 NumPy 的 ndarray类的一个子类,它知道单位。例如,可以这样做:
>>> import unyt as u
>>> distance_traveled = [3.4, 5.8, 7.2] * u.mile
>>> print(distance_traveled.to('km'))
[ 5.4717696 9.3341952 11.5872768] km
还有更多!有关安装说明、更多示例和完整的 API 参考,请参阅文档。
这个包只依赖于numpy和sympy。值得注意的是,它不依赖 于yt,它是用纯 Python 编写的。
行为守则
unyt包是The yt Project的一部分。因此,参与unyt开发是在yt 社区行为准则的支持下进行的。如果您出于任何原因认为违反了行为准则,请发送电子邮件至机密@ yt-project 。org的详细信息描述事件。发送到此地址的所有电子邮件将由通常不参与 yt 开发的个人以最严格的保密方式处理。
执照
unyt 软件包在 BSD 3 条款许可下获得许可。
引文
如果您在导致发表的工作中使用 unyt,我们将不胜感激在论文正文或致谢中提及,并在《开源软件杂志》中引用我们的论文。您可以使用以下中文提供:
@article{Goldbaum2018,
doi = {10.21105/joss.00809},
url = {https://doi.org/10.21105/joss.00809},
year = {2018},
month = {aug},
publisher = {The Open Journal},
volume = {3},
number = {28},
pages = {809},
author = {Nathan J. Goldbaum and John A. ZuHone and Matthew J. Turk and Kacper Kowalik and Anna L. Rosen},
title = {unyt: Handle, manipulate, and convert data with units in Python},
journal = {Journal of Open Source Software}
}
或以下引用格式:
Goldbaum 等人,(2018 年)。unyt:使用 Python 中的单位处理、操作和转换数据。开源软件杂志, 3(28), 809, https://doi.org/10.21105/joss.00809
历史
2.9.2 (2022-07-20)
2.9.0 (2022-07-14)
放弃了对 Python 3.6 和 3.7 的支持。
添加了对 Python 3.8、3.9 和 3.10 的支持。
修复了degC单位的 SI 前缀会在转换中给出错误值的问题。请参阅PR #176。感谢 Lee Johnston(GitHub 上的@l-johnston)的贡献。
修复使用matplotlib_support时,绘制一个空的 unyt 数组,在更改单位时会导致错误的问题。参见公关#180。感谢 Josh Borrow(GitHub 上的@JBorrow)的贡献。
修复了单位将在嵌入unyt_array的格式化字符串中打印两次的问题。参见公关#188。感谢 Clément Robert(GitHub 上的@neutrinoceros)的贡献。
添加一个从字符串表达式解析unyt_quantity的方法。参见PR #191。感谢 Clément Robert(GitHub 上的@neutrinoceros)的贡献。
修复了无法将具有 dtype int8 的unyt_array转换为不同单位的问题。参见PR #197。感谢 Clément Robert(GitHub 上的@neutrinoceros)的贡献。
unyt的导入时间已减少。参见PR #199。感谢 Clément Robert(GitHub 上的@neutrinoceros)的贡献。
修复了将unyt_array或unyt_quantity设为零次方会保留原始数组或数量的单位而不是转换为无量纲数组的问题。请参阅PR #204。感谢 Josh Borrow(GitHub 上的@JBorrow)的贡献。
添加对具有非统一尺寸等效单元的unyt_array对象的强制迭代的支持到单个unyt_array。请参阅PR #211。感谢 Nathan Goldbaum(GitHub 上的@ngoldbaum)的贡献。
添加土木工程单位pli、plf、psf、kli、klf和ksf。请参阅PR #217。感谢 GitHub 上的 @osnippet 的贡献。
修复常量和单位前缀中的拼写错误。请参阅PR #218。感谢 Clément Robert(GitHub 上的@neutrinoceros)的贡献。
修复了乘以 1 元素unyt_array将返回 unyt_quantity的问题。请参阅PR #225。感谢 Clément Robert(GitHub 上的@neutrinoceros)的贡献。
添加里德伯常数R_∞和单位Ry,添加维度 angular_frequency和单位rpm,提高阿伏伽德罗数的精度。请参阅PR #228。
修复了np.divide.reduce会为unyt_array 实例返回不正确单位的问题。参见公关#230。感谢 Kyle Oman(GitHub 上的@kyleaoman)的贡献。
2.8.0 (2020-10-05)
放弃了对 Python 3.5 的支持。
添加delta_degC和delta_degF单位以支持温差运算。请参阅PR #152。感谢 Lee Johnston(GitHub 上的@l-johnston)的贡献。
修复了随后加载具有相同但不相同的单位的单位注册表会导致崩溃的问题。参见PR #158。感谢 Matthew Turk(GitHub 上的@matthewturk)提供最初的错误报告和修复。
添加力单位kip和压力单位psi。感谢 P. Talley(GitHub 上的@otaithleigh)的贡献。请参阅PR #162。
修复了在不同注册表中定义的单元上的算术运算并在一个方向上定义转换会导致崩溃的问题。请参阅PR #164。感谢 Clément Robert(GitHub 上的@neutrinoceros)提供最初的错误报告和修复。
2.7.2 (2020-06-29)
unyt.returns和unyt.accepts装饰器现在可以正确地用于接受或返回具有无量纲单位的数据的函数。参见PR #146。感谢 Simon Schopferer(GitHub 上的@simfinite)提供最初的错误报告和修复。
测试中使用的数据与源代码分发打包在一起,并且 unyt.test()现在本身作为 unyt 持续集成测试的一部分运行。请参阅PR #149和PR #150。感谢 Miguel de Val-Borro(GitHub 上的@migueldvb)提供最初的错误报告和修复。
degC和degF单位现在默认呈现为°C和°F, °C和°F现在也被识别为有效的单位名称。感谢 Lee Johnston(GitHub 上的@l-johnston)的贡献。
在打印带有 micro 前缀的单位时,使用更规范的 micro 符号表示,避免在 Matplotlib 绘图标签中显示单位名称时出现问题。参见PR #153。感谢 Matthew Turk(GitHub 上的@matthewturk)提供错误报告和修复。
为太阳能装置添加更多替代拼写。参见PR #155。感谢 Clément Robert(GitHub 上的@neutrinoceros)提供最初的错误报告。
2.7.1 (2020-02-17)
2.7.0 (2020-02-06)
unyt_array和unyt_quantity类现在有一个新的可选 名称属性。此属性的主要目的是启用 matplotlib 绘图标签的自动生成。name属性通过单位转换和复制传播,但不通过数学运算传播。有关详细信息,请参阅PR #129和文档。
添加对具有对数维度的Neper和Bel单位的支持。这包括对分贝单位的支持。请注意,对数单位只能与其他对数单位一起使用,并且必须手动应用和剥离。请参阅PR #133和PR #134。
添加对 SI 电感单位H的支持。请参阅PR #135。
修复了使用单位将数量提高到幂时产生的错误消息的格式。参见PR #131。感谢 Lee Johnston(GitHub 上的@l-johnston)对上述所有贡献。
修复加载由 yt.units保存的腌制数组时不正确的单元元数据。参见PR #137。
2.6.0 (2020-01-22)
通过导入unyt不再启用 Matplotlib 支持。相反,现在需要在您希望 unyt 自动生成绘图标签的代码中使用unyt.matplotlib_support上下文管理器。在以前的版本中默认启用 Matplotlib 支持会导致某些用户在以前的工作代码中崩溃,因此我们决定将绘图支持设为可选。有关更多详细信息,请参阅文档。我们很抱歉引入破坏某些用户代码的新功能。参见PR #126。感谢 Lee Johnston(GitHub 上的@l-johnston)的贡献。
更新了贡献指南以包含有关为毒物测试设置多个 Python 版本的更多详细信息。
2.5.0 (2020-01-20)
2.4.1 (2020-01-10)
2.4.0 (2019-10-25)
通过与单位对象相乘来提高创建数量或小型数组的性能。从没有数字 dtype 的数据创建数组或数量现在将引发UnitOperationError而不是 UnitDtypeError,后者已被删除。参见PR #111。
使用==和 !=运算符将数据与具有不同维度的单位进行比较将不再引发错误。其他比较运算符将继续引发错误。参见PR #109。
修复了clip执行中的一个极端情况。请参阅PR #108。感谢 Matthew Turk(GitHub 上的@matthewturk)的贡献。
添加%作为有效的无量纲单位,其值为0.01,也可在名称percent下使用。参见PR #106。感谢 Thomas Hisch 的贡献。
在默认单位查找表中添加了条形图。请参阅PR #103。感谢 Thomas Hisch(GitHub 上的@thisch)的贡献。
2.3.1 (2019-08-21)
添加了对 NumPy 1.17 中添加的剪辑ufunc 的支持。请参阅PR #102。
2.3.0 (2019-08-14)
2.2.2 (2019-07-03)
修复错误地将 E&M 单位转换为其“原生”单位系统,例如,将高斯转换为 CGS 单位将返回特斯拉,将特斯拉转换为 MKS 单位将返回高斯。请参阅PR #96。
2.2.1 (2019-07-02)
2.2.0 (2019-04-03)
多项性能优化。这包括对 MKS/CGS E&M 单位转换行为的轻微更改,使转换规则稍微宽松一些。参见PR #82。
2.1.1 (2019-03-27)
修复了从 JSON 输出恢复单位注册表的问题。参见PR #81。
2.1.0 (2019-03-26)
此版本包括 2.0.0 版本的一些次要新功能和错误修正。
2.0.0 (2019-03-08)
unyt 2.0.0 包括许多令人兴奋的新功能以及一些错误修复。此版本中有一些与自动单元简化和 dtype 处理相关的向后不兼容的小更改。有关详细信息,请参阅下面的发行说明。如果您是从unyt 1.x升级,我们建议进行测试以确保这些更改不会对您产生重大影响。如果您遇到问题,请通过在 GitHub 上打开问题告诉我们。
放弃了对 Python 2.7 和 Python 3.4 的支持。添加了对 Python 3.7 的支持。
添加了 Unit.simplify(),它取消了单位表达式中具有反维度的项对,并使得unyt_array 乘法和除法的结果将自动简化单位。这意味着组合不同尺寸等效单元的操作将在许多情况下取消。例如
>>> from unyt import kg, g >>> print((12 * kg) / (4 * g)) 3000.0 dimensionless旧版本的unyt会返回4.0 kg/g。有关详细信息,请参阅PR #58 。此更改可能会导致操作单元具有与旧版本unyt不同的等效简化单元。
添加了将非规范单位名称解析为等效规范单位名称的功能。这意味着现在可以在从 unyt命名空间导入单元以及将单元名称作为字符串传递给 unyt时使用替代的非规范单元名称来引用单元名称。例如:
>>> from unyt import meter, second >>> data = 1000.0 * meter / second >>> data.to("kilometer/second") unyt_quantity(1., 'km/s') >>> data.to("metre/s") unyt_quantity(1000., 'm/s')该文档现在有一个unyt识别的单位表以及每个单位的已知替代拼写。
添加了对 unicode 单位名称的支持,包括μm表示千分尺和Ω 表示欧姆。参见PR #59。
大大改进了对没有float64 dtype 的数据的支持。而不是将所有数据强制为float64 , unyt现在将保留数据的 dtype。还不是 numpy 数组的数据将通过内部调用np.array强制转换为 dtype 。将整数数据转换为新单位会将数据转换为浮点数,如果这导致精度损失,则会打印一条警告消息。有关详细信息,请参阅PR #55。此更改可能会导致数据以不同的 dtype 加载到unyt中。在 Windows 上,默认整数 dtype 是int32,因此数据可能开始被识别为 int32或转换为float32在默认情况下它被解释为 float64之前的位置。
单位注册表现在与单位系统相关联。这意味着可以创建与非 MKS 单位系统相关联的单位注册表,以便转换为“基本”单位将在该非 MKS 系统中结束。例如:
>>> from unyt import UnitRegistry, unyt_quantity >>> ureg = UnitRegistry(unit_system="cgs") >>> data = unyt_quantity(12, "N", registry=ureg) >>> data.in_base() unyt_quantity(1200000., 'dyn')有关详细信息,请参阅PR #62。
添加了两个新的实用程序函数,unyt.unit_systems.add_constants和 unyt.unit_systems.add_symbols,它们可以使用一组单元符号填充命名空间,其方式与填充顶级unyt命名空间的方式相同。例如,使用unyt的库的作者可以创建一个用户可以用来访问单元数据的对象,如下所示:
>>> from unyt.unit_systems import add_symbols >>> from unyt.unit_registry import UnitRegistry >>> class UnitContainer: ... def __init__(self): ... add_symbols(vars(self), registry=UnitRegistry()) ... >>> units = UnitContainer() >>> units.kilometer km >>> units.microsecond μs参见PR #68。
从顶级unyt命名空间添加缺少的“微秒”名称。参见PR #48。
通过定义unyt_array.argsort添加对numpy.argsort的支持。参见PR #52。
添加法拉单位并修复 MKS 和 CGS 电磁单位之间的转换问题。请参阅PR #54。
修复了反速度和statohm之间的错误转换。参见 PR #61。
修复了使用较新版本的 pip从源安装unyt的问题。参见PR #63。
修复了使用自定义单元注册表时使用define_unit导致崩溃的错误。感谢 Bili Dong(GitHub 上的@qobilidob)的拉取请求。参见PR #64。
我们还要感谢 Daniel Gomez (@dangom)、Britton Smith (@brittonsmith)、Lee Johnston (@l-johnston)、Meagan Lang (@langmm)、Eric Chen (@ericchen)、Justin Gilmer (@justinGilmer)、和 Andy Perez (@sharkweek) 报告问题。
1.0.7 (2018-08-13)
触发 zenodo 归档。
1.0.6 (2018-08-13)
完成 JOSS 提交的小论文更新。
1.0.5 (2018-08-03)
unyt 1.0.5 包含反映 JOSS 方法论文的 peew 审查过程的更改。同行评审员是 Stuart Mumfork ( @cadair )、Trevor Bekolay ( @tbekolay ) 和 Yan Grange ( @ygrange )。编辑是 Kyle Niemeyer ( @kyleniemeyer )。unyt开发团队感谢我们的审稿人和编辑,感谢他们帮助我们完成了unyt论文,并感谢大量评论和建议,这些评论和建议改进了论文和整个软件包。
此外,我们要感谢 Mike Zingale、Meagan Lang、Maksin Ratkin、DougAJ4、Ma Jianjun、Paul Ivanov 和 Stephan Hoyer 报告问题。
为unyt定义的自定义异常类添加了文档字符串。参见PR #44。
在贡献者指南中添加了关于如何运行测试以及 PR 审查指南是什么的改进文档。参见PR #43。
根据审稿人的建议更新方法论文的文本。参见PR #42。
现在可以通过执行unyt.test()在已安装的unyt副本上运行测试。参见PR #41。
对 LICENSE 文件进行少量编辑,以便 GitHub 识别它。参见PR #40。感谢 Kyle Sunden ( @ksunden ) 的贡献。
添加空间频率作为维度,并为空间频率维度的频谱 等效添加支持。请参阅PR #38感谢 Kyle Sunden ( @ksunden ) 的贡献。
添加对 Python 3.7 的支持。参见PR #37。
如果未安装numpy和sympy ,现在导入unyt将失败。见PR #35
现在,使用 Python in关键字测试单元名称是否包含在单元注册表 中将适用于所有单元名称。参见PR #31。
顶级 unyt 命名空间中 megagram 的别名被错误地设置为引用公斤,现在具有正确的值。参见PR #29。
可以通过正确广播的结果将标量转换为无量纲数组幂,而不会引发有关单位的错误。参见PR #23。
单位是否允许使用 SI 前缀(例如,meter 可以使用 SI 前缀以形成厘米、千米和许多其他单位)现在作为元数据存储在单位注册表中,而不是作为 unyt内部的全局状态。参见PR #21。
调整了 CGS 和 MKS E&M 单位之间的转换规则,以便仅在单位系统之间转换时才会出现错误,而不仅仅是在涉及 E&M 单位的复杂单位转换时出现。请参阅PR #20。
round(q)其中q是unyt_quantity实例将不再引发错误,现在将返回最近的舍入浮点数。见PR #19。
将 smoot 添加为一个单元。参见PR #14。
1.0.4 (2018-06-08)
展开安装说明
在自述文件中提及论文和 arxiv 提交。
1.0.3 (2018-06-06)
修复 pypi 上的自述文件渲染
1.0.2 (2018-06-06)
添加了要提交给开源软件期刊的论文。
自述文件的调整
1.0.1 (2018-05-24)
不要在 setup.py 中使用 setup_requires
1.0.0 (2018-05-24)
PyPI 上的第一个版本。
unyt 最初是 yt 的一个子模块,名为 yt.units。
2018 年,它作为自己的包从 yt.units 中分离出来。