【问题标题】:Astropy quantity in-place conversionAstropy数量就地转换
【发布时间】:2018-04-27 19:58:17
【问题描述】:

有没有办法“就地”将天文量转换为另一组单位? to 方法总是返回一个副本,所以它不是那么有用。比如:

import astropy.units as u
data = [1, 2, 3]*u.g
data.convert_to('kg')

Pintyt.units 都有就地转换:

from pint import UnitRegistry
u = UnitRegistry()
data = [1, 2, 3]*u.g
data.ito('kg')

from yt.units import g
data = [1, 2, 3]*g
data.convert_to_units('kg')

粗略浏览一下 astropy 文档和源代码表明答案是否定的,但也许我遗漏了一些东西。

【问题讨论】:

    标签: astropy


    【解决方案1】:

    目前有几种方法可以做到这一点。鉴于你的例子:

    >>> import astropy.units as u
    >>> data = [1, 2, 3] * u.g
    >>> data
    <Quantity [1., 2., 3.] g>
    

    你可以这样做:

    >>> data.value * u.kg
    <Quantity [1., 2., 3.] kg>
    

    或者这个:

    >>> data * u.kg / data.unit
    <Quantity [1., 2., 3.] kg>
    

    或者这个:

    >>> data._unit = u.kg
    >>> data
    <Quantity [1., 2., 3.] kg>
    

    这些方法都不会复制 Numpy 数组,因此对于许多应用程序来说性能都可以。

    我认为没有一种方法可以在不访问私有数据成员的情况下设置data._unit。对此进行了一些讨论(在 Column 和 Quantity 对象的上下文中)here,我认为结论是set_unit 方法将是一个有用的补充,但尚未实现。因此,您可以针对该功能请求 here 提出问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2023-02-04
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      相关资源
      最近更新 更多