从Astropy Distance对象访问浮点值

时间:2015-11-25 13:51:06

标签: python astropy

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

这里' a 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>]

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

添加:

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

np.asarray(d)

但我明白了:

ValueError: setting an array element with a sequence.

3 个答案:

答案 0 :(得分:4)

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

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]

答案 1 :(得分:3)

为了清楚起见,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.])

获得原始Numpy ndarray,其大小为kpc。不要使用许多Distance个对象的列表。这非常浪费!

答案 2 :(得分:1)

你的意思是

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