我不明白 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 数组被限制为指定的类型,例如你的:
>>> 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])
numpy 实现它 ST任何涉及两个 int 的数学都会导致 int .... 至少这在很大程度上是我的经验