[AstroPy] Constructing Angle from a tuple specified as sign string plus numbers for degrees, arcmin, arcsec
Erik Bray
embray at stsci.edu
Tue Aug 11 10:30:39 EDT 2015
On 08/10/2015 11:13 PM, Eric Jensen wrote:
> "I don't think is unusual for CDS tables. I always thought it was because Fortran77 didn't know -00 is different than +00. “
>
> It’s not just Fortran - Python too! (And pretty much any other language you can name, unless you’re dealing with strings.)
>
> In [1]: +0 == -0
> Out[1]: True
This is the only logical possibility though. However, as I mentioned in the
last message it's important to note a difference between integers and floats in
this regard. For floats you still get:
In [17]: +0.0 == -0.0
Out[17]: True
However:
In [18]: +0.0 is -0.0
Out[18]: False
Unlike for integers where the aren't distinct representations for signed zero:
In [19]: +0 is -0
Out[19]: True
Although +0.0 == -0.0, signed float zeros still follow the usual arithmetic
rules for signed zero:
In [19]: +0 is -0
Out[19]: True
In [20]: -0.0 * 1
Out[20]: -0.0
In [21]: -0.0 * -1
Out[21]: 0.0
In [22]: np.sqrt(-0.0)
Out[22]: -0.0
and so on. One reasons it's good to get in the habit (and I admit I'm lazy
about this myself) of appending a decimal to almost all numeric literals in
scientific code so that it's stored as a float, and have the code convert to
integers where it's appropriate to use integers.
Erik
> On Aug 10, 2015, at 6:00 PM, Erik Bray <embray at stsci.edu> wrote:
>
>>>> You can instantiate an Angle array using a generator, so you could probably just
>>>> slurp in the data using a generator expression, allowing you to transform the
>>>> values one a time while creating the Angle rather than transforming the table
>>>> all at once first (please bear with the LISPiness of this example):
>>>>
>>>> dec = Angle(((int(row[0] + str(row[1])), row[2], row[3])
>>>> for row in table['DE-', 'DEd', 'DEm', 'DEs'))
>>>>
>>>>
>>>> # (Note: originally I used row[2:] above, but there seems to be an unrelated bug
>>>> involved in taking slices of rows...I'll report on that.)
>>>
>>> In case you want to do this without loops, np.char.add can be used to
>>> concatenate string arrays element-wise. So for instance you could
>>> concatenate the sign column and the degree column of the declination with
>>>
>>> np.add(t['DE-'], t['DEd'])
>>>
>>> then you would end up with three arrays instead of four.
>>
>> This doesn't work because t['DE-'] is a string column, and t['DEd'] is a
>> (masked) integer column.
>>
>> In any case, doing a row-wise transformation allows doing this with one fewer loop.
>
> _______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy
>
More information about the AstroPy
mailing list