[Numpy-discussion] aa.astype(int) truncates and doesn't round

josef.pktd at gmail.com josef.pktd at gmail.com
Thu Jan 6 12:04:56 EST 2011


On Thu, Jan 6, 2011 at 10:40 AM, Keith Goodman <kwgoodman at gmail.com> wrote:
> On Thu, Jan 6, 2011 at 2:14 AM,  <josef.pktd at gmail.com> wrote:
>> just something I bumped into and wasn't aware of
>>
>>>>> aa
>> array([ 1.,  1.,  1.,  1.,  1.])
>>>>> aa.astype(int)
>> array([0, 1, 0, 0, 0])
>>>>> aa - 1
>> array([ -2.22044605e-16,   2.22044605e-16,  -2.22044605e-16,
>>        -3.33066907e-16,  -3.33066907e-16])
>>>>> np.round(aa).astype(int)
>> array([1, 1, 1, 1, 1])
>
>>> a = np.ones(100)
>>> a.astype(int)
> array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1])
>
> My default numpy int is 64 bits. Try 32 bits:
>
>>> a = np.ones(100, np.int32)
>>> a.astype(int)
>
> array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>       1, 1, 1, 1, 1, 1, 1, 1])


the full exercise includes some calculations first, so we are not precisely at 1

>>> d_
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 1., -1.,  0.,  0.,  0.],
       [ 1.,  0., -1.,  0.,  0.],
       [ 1.,  0.,  0., -1.,  0.],
       [ 1.,  0.,  0.,  0., -1.]])
>>> np.set_printoptions(precision=2)
>>> np.linalg.pinv(d_)
array([[  1.00e+00,  -2.34e-16,  -8.50e-17,  -7.63e-17,  -8.50e-17],
       [  1.00e+00,  -1.00e+00,  -1.06e-16,   2.19e-16,  -6.18e-17],
       [  1.00e+00,  -2.21e-16,  -1.00e+00,  -2.27e-16,   9.38e-18],
       [  1.00e+00,  -6.40e-17,  -2.84e-17,  -1.00e+00,  -7.65e-17],
       [  1.00e+00,  -1.70e-16,  -9.55e-17,  -1.52e-17,  -1.00e+00]])
>>> np.linalg.pinv(d_).astype(int)
array([[ 0,  0,  0,  0,  0],
       [ 0, -1,  0,  0,  0],
       [ 0,  0, -1,  0,  0],
       [ 0,  0,  0, -1,  0],
       [ 0,  0,  0,  0, -1]])
>>> np.linalg.inv(d_).astype(int)
array([[ 1,  0,  0,  0,  0],
       [ 1, -1,  0,  0,  0],
       [ 1,  0, -1,  0,  0],
       [ 1,  0,  0, -1,  0],
       [ 1,  0,  0,  0, -1]])

Josef

> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>



More information about the NumPy-Discussion mailing list