Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting rid of units in astropy

I have a large (262615,3) array of values that all have units attached to them. Specifically originating from this function:

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

I would like for this array to be unit less so I can easily write it into a textfile. Before anyone links the Stack Exchange question asking something similar, I have tried using .magnitude and it doesn't work. Also I would like to add, due to the nature of my array I would prefer the most efficient possible way of doing so, if possible.

A sample of data:

 <Quantity -473.698 mpc> <Quantity -38.3794 mpc> <Quantity -1832.23 mpc>
 <Quantity -2269.57 mpc> <Quantity -842.855 mpc> <Quantity -2445.88 mpc>
like image 639
QuantumPanda Avatar asked Sep 07 '25 01:09

QuantumPanda


1 Answers

Your c.cartesian.xyz is a Quantity object. It has a unit attribute and a value attribute.

The value attribute is a Numpy array and I think is what you want.

Example:

>>> 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
like image 150
Christoph Avatar answered Sep 10 '25 10:09

Christoph