我需要从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.
答案 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