为什么Python**操作符在数组和标量上的行为不同

为什么Python**操作符在数组和标量上的行为不同,python,Python,我不理解Python中**操作符的以下行为的理由。这将返回一个浮点值: >>> 10**-1 0.1 这将返回整数: >>> y=np.array([10,10,10]) >>> y array([10, 10, 10]) >>> y**-1 array([0, 0, 0]) 为什么 下面的方法可行,但上面的方法似乎非常错误 >>> y**-1.0 array([ 0.1, 0.1, 0.1])

我不理解Python中**操作符的以下行为的理由。这将返回一个浮点值:

>>> 10**-1
0.1
这将返回整数:

>>> y=np.array([10,10,10])
>>> y
array([10, 10, 10])
>>> y**-1
array([0, 0, 0])
为什么

下面的方法可行,但上面的方法似乎非常错误

>>> y**-1.0
array([ 0.1,  0.1,  0.1])

numpy实现它的S.T。任何涉及两个int结果的数学都是int。。。。至少这在很大程度上是我的经验

numpy实现了它的S.T。任何涉及两个整数的数学结果都是一个整数。。。。至少这在很大程度上是我的经验

为了提高效率,numpy阵列仅限于指定的类型,例如您的:

>>> y=np.array([10,10,10])
>>> y.dtype
dtype('int64')
因为int不能表示小数部分,所以它被丢弃。如果使用这样的浮点数组,则结果与预期一致:

>>> y=np.array([10,10,10], dtype='float32')
>>> y.dtype
dtype('float32')
>>> y**-1
array([ 0.1,  0.1,  0.1], dtype=float32)
此外,如果您最初传入的列表包含浮点类型,则数据类型将默认为float64:


为了提高效率,numpy阵列被限制为指定的类型,例如您的:

>>> y=np.array([10,10,10])
>>> y.dtype
dtype('int64')
因为int不能表示小数部分,所以它被丢弃。如果使用这样的浮点数组,则结果与预期一致:

>>> y=np.array([10,10,10], dtype='float32')
>>> y.dtype
dtype('float32')
>>> y**-1
array([ 0.1,  0.1,  0.1], dtype=float32)
此外,如果您最初传入的列表包含浮点类型,则数据类型将默认为float64:


因为numpy数组重载了uuu pow_uuu_uu_uu_uu_u_u_u_u_u_u_u_u_u_u_u_u______?除非你在做一些不寻常的事情,需要区分正浮点数和负浮点数,看起来不管你得到的是FP还是整数。当我说“非常错误”时,我的意思是它似乎违反了我认为的一个基本原则:一个人可以像对标量那样对数组进行操作,并得到一致的结果。因为numpy数组重载了“pow”特殊方法?为什么它会非常错误?除非你在做一些不寻常的事情,需要区分正浮点数和负浮点数,无论你得到的是FP还是整数,这似乎都无关紧要。当我说得非常错误时,我的意思是这似乎违反了我认为的一个基本原则:一个人可以像对标量那样对数组进行操作,并得到一致的结果。