python - 使用 numpy 平方值给出负数

标签 python numpy

我正在尝试使用 numpy 对数组进行逐元素平方。我注意到有些值显示为负数。平方值不接近最大 int 限制。有谁知道为什么会这样以及我该如何解决?我宁愿避免使用 for 循环对数组元素进行平方,因为我的数据集非常大。

这是一个正在发生的事情的例子:

import numpy as np

test = [1, 2, 47852]
sq = np.array(test)**2
print(sq)
print(47852*47852)

输出:

[1,4, -2005153392]
2289813904

最佳答案

这是因为 NumPy 不检查整数溢出 - 可能是因为这会减慢每个整数运算的速度,而 NumPy 在设计时就考虑到了效率。所以当你有一个 32 位整数数组并且你的结果不适合 32 位时,它仍然被解释为 32 位整数,给你奇怪的负结果。

为避免这种情况,您可以注意安全执行操作所需的 dtype,在这种情况下 'int64' 就足够了。

>>> np.array(test, dtype='int64')**2
2289813904

您在 Python int 中看不到同样的问题,因为 Python 会检查溢出并在必要时相应地调整为更大的数据类型。如果我记得的话,邮件列表上有一个关于这个的问题,回复是如果在 NumPy 中做同样的事情,会对原子数组操作有很大的性能影响。

至于为什么您的默认整数类型在 64 位系统上可能是 32 位的,如 Goyo answered在相关问题上,默认整数 np.int_ 类型 is the same as C long ,它依赖于平台,但可以是 32 位。

关于python - 使用 numpy 平方值给出负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774047/

相关文章:

python - python中的类变量与实例变量

python - 为什么 numpy 从相同的随机状态返回不同的随机数?

python - 提高 numpy 数组上复杂逻辑条件的性能

python - 无法将事件数据传递给 Api.ai

python - Unicode API 响应抛出错误 '' ascii' 编解码器无法编码字符 u'\u201 9' in position 22462'

python - 导入错误 : No module named '_version' when importing mechanize

python - flask : TypeError: 'str' object is not callable while validation using Flask-WTF

python - FFT求自相关函数

python:可变长度2矩阵的平均值

python - 当元素包含 numpy 数组时,无法测试 python 列表元素成员资格