当前位置:  开发笔记 > 编程语言 > 正文

使用numpy到平方值给出负数

如何解决《使用numpy到平方值给出负数》经验,为你挑选了1个好方法。

我正在尝试使用numpy元素方形数组.我注意到有些值显示为负数.平方值不接近max int limit.有谁知道为什么会发生这种情况以及如何解决这个问题?我宁愿避免使用for循环来对数组元素进行平方,因为我的数据集非常大.

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

import numpy as np

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

输出:

[1,4, -2005153392]
2289813904

miradulo.. 17

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

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

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

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

至于为什么你的默认整数类型在64位系统上可能是32位,正如Goyo在一个相关问题上回答的那样,默认整数np.int_类型与C long相同,它取决于平台,但可以是32位.



1> miradulo..:

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

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

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

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

至于为什么你的默认整数类型在64位系统上可能是32位,正如Goyo在一个相关问题上回答的那样,默认整数np.int_类型与C long相同,它取决于平台,但可以是32位.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有