从 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
对象的列表。太浪费了!
我需要从 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
对象的列表。太浪费了!