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

时间:2013-04-04 20:26:41

标签: 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])

2 个答案:

答案 0 :(得分:4)

为了提高效率,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)

此外,如果您传入的列表最初包含float类型,则dtype将默认为float64

>>> y=np.array([10.0 ,10.0 ,10.0])
>>> y.dtype
dtype('float64')
>>> y**-1
array([ 0.1,  0.1,  0.1])

答案 1 :(得分:1)

numpy实现了S.T. 任何数学涉及两个int结果在一个int ....至少那是我的经验