uint:为什么 -(a*b) 不同于 -a*b
uint: Why is -(a*b) different from -a*b
除了最后一个我都明白了:
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
在最后一行中,一个 uint 变量与一个浮点数相乘得到一个浮点数,那么为什么 -a*1.
的结果不是 -5.0,这与 -(a*1.)
和 0-a*1.
?
我认为是操作顺序的问题:
-a*1.
是从左到右,但是 0-a*1.
它是一个减法(即使它是零)并且 0-
应用 after a*1.
(对象类型改变的地方)。
-a*1.
是 (-a)*1.
,因为一元 -
有一个 higher precedence than *
. For details, look at the excerpts from the Python grammar in the documentation.
除了最后一个我都明白了:
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
在最后一行中,一个 uint 变量与一个浮点数相乘得到一个浮点数,那么为什么 -a*1.
的结果不是 -5.0,这与 -(a*1.)
和 0-a*1.
?
我认为是操作顺序的问题:
-a*1.
是从左到右,但是 0-a*1.
它是一个减法(即使它是零)并且 0-
应用 after a*1.
(对象类型改变的地方)。
-a*1.
是 (-a)*1.
,因为一元 -
有一个 higher precedence than *
. For details, look at the excerpts from the Python grammar in the documentation.