我总是使用from __future__ import div
来避免整数除法问题。我刚刚遇到一个案例,它显然仍然存在:
np.array([10])**(-1)
返回array([0])
,与返回array([0.1])<的
正如预期的那样。 1/np.array([10])
相反
我知道这个问题可以解决,例如使用 np.array([10])**(-1.)
或使用 astype('float')
将数组转换为 float 。我只是想知道为什么它会这样,因为考虑到例如,它对我来说似乎有点不一致。 10**(-1)
给出 0.1。
最佳答案
numpy.array()
使用运算符重载来实现功能。 **
由 object.__pow__()
special method 处理,例如。
/
运算符通常由 object.__div__
处理(以及右侧值的 __rdiv__
方法),以及 from __future__ import div
'switch' 导致 Python 使用 object.__truediv__
方法代替。
但是,**
运算符不受开关的影响; Python 将继续调用 object.__pow__
并且 numpy
不会知道您使用了 __future__
导入。
因此,当您给它整数操作数时,它将继续返回整数结果;即使这样,它也不会强制 float
。
请注意,Python 也提供了一个取整除法运算符,其形式为 //
operator和 __floordiv__
hook 。求幂没有这样的下限等价物,因此 numpy 没有其他选项可以为您提供使用 float 和 int 操作数之间的区别。 p>
关于python - 为什么 int numpy 数组的逆幂为 0,尽管 "from __future__ import division"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626470/