[AstroPy] Problem with astropy 03 and quantities
Thomas Robitaille
thomas.robitaille at gmail.com
Mon Nov 25 06:43:02 EST 2013
Hi Yannick,
On 25 November 2013 11:14, Yannick Roehlly <yannick.roehlly at lam.fr> wrote:
> Hi Thomas,
>
> Thanks for the answer.
>
> Le Mon, 25 Nov 2013 10:47:37 +0100,
> Thomas Robitaille <thomas.robitaille at gmail.com> a écrit :
>
>> First, regarding the ``copy`` issue, could you provide some code to
>> replicate this? ``copy`` should work with Quantites:
>>
>> In [5]: np.copy(np.array([1,2,3]) * u.m)
>> Out[5]: array([1, 2, 3])
>
> np.copy should accept an array-like but here it fails if it's an array
> of quantities.
>
> In [16]: np.copy([x * u.m for x in xrange(10)])
> ERROR:astropy:ValueError: setting an array element with a sequence.
> ERROR: ValueError: setting an array element with a sequence.
> [numpy.lib.function_base]
> ---------------------------------------------------------------------------
> ValueError Traceback (most recent call
> last) <ipython-input-16-dd73be22bb28> in <module>() ----> 1 np.copy([x
> * u.m for x in xrange(10)])
>
> /usr/lib/pymodules/python2.7/numpy/lib/function_base.pyc in copy(a,
> order) 828
> 829 """
> --> 830 return array(a, order=order, copy=True)
> 831
> 832 # Basic operations
>
> ValueError: setting an array element with a sequence.
Ah - in this case, are you the one making the array of quantity
objects, or is that coming from astropy.cosmology? We should
definitely never return an array of quantities, but rather a quantity
array.
> I understand that this is not a bug as everything works as expected and
> as numpy can't manage a Quantity datatype.
>
>> To adapt your code, you simply need to add ``.value`` to the quantity
>> to get the underlying Numpy array if you want to drop the units.
>
> Yes, but that means the code will not work with prior version of
> astropy. I'd better change it to have a numpy.array instead of a list
> at the point the copy fails.
I would suggest using a try...except in your code for this case, so
that you can maintain backward-compatibility.
>> There is a performance penalty in using Quantity in 0.3, but already
>> in 0.3.1 there will be significant optimizations, and given that
>> ``Quantity`` is widely used in Astropy, you can expect more work on
>> optimizations in future.
>
> My question was not for the astropy internals but for the computation
> on arrays. Thanks to the pointer Kyle gave me, I've seen that some
> optimizations made by Alex consist in splitting the value from the
> quantity, making the computations and joining them back.
>
>> By the way, there *is* an entry in the changelog:
>
> I've read it ;-) but I meant a warning, as it can break some code. But
> I admit I'm in a specific case.
To some extent, all of the things in the API changes section might
break code - for 0.3 the list is unfortunately quite long, but as Neil
pointed out, we want to make sure we minimize this in future.
Cheers,
Tom
>
> Cheers,
>
> Yannick
>
> --
> One can't proceed from the informal to the formal by formal means.
> _______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy
More information about the AstroPy
mailing list