【问题标题】:Astropy 'Time' object has no attribute 'dtype'Astropy 'Time' 对象没有属性 'dtype'
【发布时间】:2020-04-21 07:07:03
【问题描述】:

由于更新到Astropy 4.0,尝试访问Time 对象的dtype 导致出错

“时间”对象没有属性“dtype”

我已通读文档,但找不到有关此更改或如何复制它提供的功能的提及。在更新之前,此类访问会返回 objectfloat64 等值。

如何检索 Astropy 4.0 Time 实例的 dtype

【问题讨论】:

    标签: astropy dtype


    【解决方案1】:

    您从哪个版本的 Astropy 升级?我找不到任何有(记录的)Time.dtype 属性的最新版本。在之前的版本中:

    >>> import astropy
    >>> astropy.__version__
    '3.2.3'
    >>> from astropy.time import Time
    >>> t = Time([1, 2, 3], format='unix')
    >>> t.dtype
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/embray/.virtualenvs/astropy/lib/python3.6/site-packages/astropy/time/core.py", line 1558, in __getattr__
        return self.__getattribute__(attr)
    AttributeError: 'Time' object has no attribute 'dtype'
    

    但是有:

    >>> t.value.dtype
    dtype('float64')
    

    Time.value 给出了值的底层 numpy 数组(可能记录得更好一些)。

    我不确定是否曾经有过 Time.dtype,或者如果有的话,它一定是在更旧的版本中。

    【讨论】:

    • 我一直在使用 Astropy 3.1.2,它产生的值(可用作字符串)如 Timefloat64
    • “产生的值可用作字符串”是什么意思?你有例子吗?
    • “看来我正在寻找._format”是什么意思?您不应该使用它:在 Python 中,以下划线开头的属性通常意味着它们是不应直接使用的内部实现细节。您可能需要公共属性Time.format。这与dtype 完全不同。
    • 正确,对不起。 Time.format 有效。我的问题是,发生这种情况的代码是在我第一次以天文学项目为动机学习 Python 时编写的,所以它不是最好的上下文。多年来(直到本月)dtype 提供了我想要的信息(我一直在定期更新软件包),然后突然就没有了。 format 可以解决问题,尽管正如您所说,它通常与 dtype 不同。
    • 另外,我无意吹毛求疵——我只是想确保您使用正确的方法来解决您的问题......
    【解决方案2】:

    Time 对象从未有 dtype,因为 Time 类不继承自 np.ndarray

    正如@Iguananaut 所述,您可能一直在查看value 或其他格式属性(例如t.iso.dtype)。

    另一个查找dtype 的地方是info 属性t.info.dtype,但它始终只是对象,并且在Time 对象存储在Table 中时使用。

    【讨论】:

    • 我一直在使用 Astropy 3.1.2,它产生了像 Timefloat64 这样的值(可用作字符串)。
    猜你喜欢
    • 2021-06-06
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2016-05-14
    • 2023-02-03
    相关资源
    最近更新 更多