[Numpy-discussion] wrong casting of augmented assignment statements
Sebastian Walter
sebastian.walter at gmail.com
Tue Jan 12 13:05:01 EST 2010
Hello,
I have a question about the augmented assignment statements *=, +=, etc.
Apparently, the casting of types is not working correctly. Is this
known resp. intended behavior of numpy?
(I'm using numpy.__version__ = '1.4.0.dev7039' on this machine but I
remember a recent checkout of numpy yielded the same result).
The problem is best explained at some examples:
wrong casting from float to int::
In [1]: import numpy
In [2]: x = numpy.ones(2,dtype=int)
In [3]: y = 1.3 * numpy.ones(2,dtype=float)
In [4]: z = x * y
In [5]: z
Out[5]: array([ 1.3, 1.3])
In [6]: x *= y
In [7]: x
Out[7]: array([1, 1])
In [8]: x.dtype
Out[8]: dtype('int32')
wrong casting from float to object::
In [1]: import numpy
In [2]: import adolc
In [3]: x = adolc.adouble(numpy.array([1,2,3],dtype=float))
In [4]: y = numpy.array([4,5,6],dtype=float)
In [5]: x
Out[5]: array([1(a), 2(a), 3(a)], dtype=object)
In [6]: y
Out[6]: array([ 4., 5., 6.])
In [7]: x * y
Out[7]: array([4(a), 10(a), 18(a)], dtype=object)
In [8]: y *= x
In [9]: y
Out[9]: array([ 4., 5., 6.])
It is inconsistent to the Python behavior::
In [9]: a = 1
In [10]: b = 1.3
In [11]: c = a * b
In [12]: c
Out[12]: 1.3
In [13]: a *= b
In [14]: a
Out[14]: 1.3
I would expect that numpy should at least raise an exception in the
case of casting object to float.
Any thoughts?
regards,
Sebastian
More information about the NumPy-Discussion
mailing list