从 astropy Distance 对象访问浮点值

Access float value from astropy Distance object

我需要从 Distance astropy class 访问浮点值。

这是一个 MWE:

from astropy.coordinates import Distance
from astropy import units as u

d = []
for _ in range(10):
    d.append(Distance(_, unit=u.kpc))

这会产生 <class 'astropy.coordinates.distances.Distance'> 个对象的列表:

[<Distance 0.0 kpc>, <Distance 1.0 kpc>, <Distance 2.0 kpc>, <Distance 3.0 kpc>, <Distance 4.0 kpc>, <Distance 5.0 kpc>, <Distance 6.0 kpc>, <Distance 7.0 kpc>, <Distance 8.0 kpc>, <Distance 9.0 kpc>]

我需要存储 floats(不是对象),但我不知道如何访问它们。由于这个 MWE 是更大代码的一部分,我不能只做 d.append(_)。我需要从 Distance class.

生成的对象访问浮点数

添加:

我尝试将列表转换为 numpy 数组:

np.asarray(d)

但我得到:

ValueError: setting an array element with a sequence.

您需要 Distance 个对象的 value 属性。

d = []
for _ in range(10):
    d.append(Distance(_, unit=u.kpc).value)

...但是您也可以只使用变量 _ 而无需首先实例化这些对象。或者我可能误解了什么。

另一种表达方式:

>>> [i.value for i in d]
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

你是说

d = []
for _ in range(10):
    x = Distance(_, unit=u.kpc)
    d.append(x.kpc)  # x.Mpc , x.lightyear, etc. 

d = []
for _ in range(10):
    d.append( Distance(_, unit=u.kpc).kpc ) # Distance(_, unit=u.kpc).lightyear

需要说明的是,Distance 对象可以类似于数组。列出所有同一单元的单个 Distance 对象是愚蠢和浪费的。相反,你可以做

>>> dists = Distance(np.arange(10), unit=u.kpc)  # Note the use of a Numpy array
>>> dists
<Distance [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.] kpc>

大多数其他代码应该将其识别为 Numpy 数组并采取相应行动。虽然如果没有,你总是可以做

>>> dists.value
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

获取以 kpc 为单位的原始 Numpy ndarray。不要使用许多 Distance 对象的列表。太浪费了!