I understand all of these apart from the last one:
import numpy as np
a = np.array(5).astype('uint16')
a
Out[24]: array(5, dtype=uint16)
-a
Out[25]: 65531
a*1.
Out[26]: 5.0
-(a*1.)
Out[27]: -5.0
0-a*1.
Out[28]: -5.0
-a*1.
Out[29]: 65531.0
type(a*1.)
Out[30]: numpy.float64
In the last line a uint variable is multiplied with a float resulting in a float, so why is the result of -a*1. not -5.0, and how is this different from -(a*1.) and 0-a*1.?
-a*1.is(-a)*1., because unary-has a higher precedence than*. For details, look at the excerpts from the Python grammar in the documentation.