从astropy距离对象获取浮点值

4 投票
3 回答
570 浏览
提问于 2025-05-11 02:24

我需要从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]

撰写回答