我有一个很大的(262615,3)
值数组,所有值都附加了单位。专门源自此函数:
def coordconvert(data):
from astropy.coordinates import SkyCoord
from astropy import units as u
import numpy as np
R = data[:,0]
ra = data[:,1]
dec = data[:,2]
c = SkyCoord(ra=ra*u.degree,dec=dec*u.degree,distance=R*u.mpc)
outdata = c.cartesian.xyz
return outdata
我希望此数组的单位减少,因此我可以轻松地将其写入文本文件。 在任何人链接Stack Exchange question询问类似问题之前,我曾尝试使用.magnitude,但它不起作用。另外,我想补充一下,由于数组的性质,如果可能的话,我希望使用最有效的方法。
数据样本:
<Quantity -473.698 mpc> <Quantity -38.3794 mpc> <Quantity -1832.23 mpc>
<Quantity -2269.57 mpc> <Quantity -842.855 mpc> <Quantity -2445.88 mpc>
答案 0 :(得分:5)
您的c.cartesian.xyz
是“数量”对象。它具有unit
属性和value
属性。
value
属性是一个Numpy数组,我想这就是您想要的。
示例:
>>> from astropy.coordinates import SkyCoord
>>> c = SkyCoord(10, 20, unit='deg')
>>> c.cartesian.xyz
<Quantity [0.92541658, 0.16317591, 0.34202014]>
>>> c.cartesian.xyz.value
array([0.92541658, 0.16317591, 0.34202014])
>>> type(c.cartesian.xyz.value)
numpy.ndarray
答案 1 :(得分:2)
只需使用value
属性,但需要确保您指定感兴趣的坐标的部分和单位,例如R.A.值:
from astropy.coordinates import SkyCoord
from astropy import units as u
c = SkyCoord(ra=[0., 1., 100.] *u.degree,dec=[1., 2., -3.]*u.degree)
c.ra
>> <SkyCoord (ICRS): (ra, dec) in deg
>> [( 0., 1.), ( 1., 2.), ( 100., -3.)]>
c.ra.value
>> array([ 0., 1., 100.])
您还可以获取不同格式的单位,例如小时/弧度/弧度角
c.ra.arcmin
>> array([ 0., 60., 6000.])