【发布时间】:2020-04-21 07:07:03
【问题描述】:
由于更新到Astropy 4.0,尝试访问Time 对象的dtype 导致出错
“时间”对象没有属性“dtype”
我已通读文档,但找不到有关此更改或如何复制它提供的功能的提及。在更新之前,此类访问会返回 object 或 float64 等值。
如何检索 Astropy 4.0 Time 实例的 dtype?
【问题讨论】:
由于更新到Astropy 4.0,尝试访问Time 对象的dtype 导致出错
“时间”对象没有属性“dtype”
我已通读文档,但找不到有关此更改或如何复制它提供的功能的提及。在更新之前,此类访问会返回 object 或 float64 等值。
如何检索 Astropy 4.0 Time 实例的 dtype?
【问题讨论】:
您从哪个版本的 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,或者如果有的话,它一定是在更旧的版本中。
【讨论】:
Time 或 float64。
._format”是什么意思?您不应该使用它:在 Python 中,以下划线开头的属性通常意味着它们是不应直接使用的内部实现细节。您可能需要公共属性Time.format。这与dtype 完全不同。
Time.format 有效。我的问题是,发生这种情况的代码是在我第一次以天文学项目为动机学习 Python 时编写的,所以它不是最好的上下文。多年来(直到本月)dtype 提供了我想要的信息(我一直在定期更新软件包),然后突然就没有了。 format 可以解决问题,尽管正如您所说,它通常与 dtype 不同。
Time 对象从未有 dtype,因为 Time 类不继承自 np.ndarray。
正如@Iguananaut 所述,您可能一直在查看value 或其他格式属性(例如t.iso.dtype)。
另一个查找dtype 的地方是info 属性t.info.dtype,但它始终只是对象,并且在Time 对象存储在Table 中时使用。
【讨论】:
Time 或 float64 这样的值(可用作字符串)。