python - 为什么 int numpy 数组的逆幂为 0,尽管 "from __future__ import division"?

标签 python arrays numpy exponentiation

我总是使用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/

相关文章:

python - 从字典中的值列表创建矩阵

python - Django 过滤对象至少有一个多对多属性值

Javascript 数组与 Php 数组

python - 在 Python 2.7 中将列表字典转换为字典列表

c# - 检查一组不断变化的字符串是否包含字符串的最快方法

java - 如何将本地文件中的输出放入 ArrayList

python - 数组python的形状

Python 行/列混淆

python - Anaconda Python 3.6——pythonw 和 python 应该是等价的吗?

python 球物理模拟