从astropy距离对象获取浮点值
我需要从Distance这个astropy类中获取浮点数值。
这里有一个简单的例子:
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>]
我需要存储这些浮点数(而不是这些对象),但我不知道怎么获取它们。因为这个简单的例子是更大代码的一部分,所以我不能直接用d.append(_)
。我需要从Distance
类生成的对象中提取浮点数。
补充:
我尝试用下面的代码把列表转换成numpy数组:
np.asarray(d)
但是我得到了:
ValueError: setting an array element with a sequence.
相关文章:
- 暂无相关问题
3 个回答
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
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
对象来做列表,这样真的非常浪费!
4
你想要的是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]