gpt4 book ai didi

python - numpy 数组中的整数溢出

转载 作者:太空狗 更新时间:2023-10-29 21:14:53 24 4
gpt4 key购买 nike

import numpy as np
a = np.arange(1000000).reshape(1000,1000)
print(a**2)

通过这段代码,我得到了这个答案。为什么我会得到负值?

[[         0          1          4 ...,     994009     996004     998001]
[ 1000000 1002001 1004004 ..., 3988009 3992004 3996001]
[ 4000000 4004001 4008004 ..., 8982009 8988004 8994001]
...,
[1871554624 1873548625 1875542628 ..., -434400663 -432404668 -430408671]
[-428412672 -426416671 -424420668 ..., 1562593337 1564591332 1566589329]
[1568587328 1570585329 1572583332 ..., -733379959 -731379964 -729379967]]

最佳答案

在您的平台上,np.arange 返回 dtype 'int32' 的数组:

In [1]: np.arange(1000000).dtype
Out[1]: dtype('int32')

数组的每个元素都是一个 32 位整数。平方会导致不适合 32 位的结果。结果被裁剪为 32 位,但仍被解释为 32 位整数,但这就是您看到负数的原因。

编辑:在这种情况下,您可以通过在平方前构造一个数据类型为“int64”的数组来避免整数溢出:

a=np.arange(1000000,dtype='int64').reshape(1000,1000)

请注意,您发现的问题是使用 numpy 时固有的危险。您必须谨慎选择数据类型,并事先知道您的代码不会导致算术溢出。为了速度,numpy 不能也不会在这种情况发生时警告你。

参见 http://mail.scipy.org/pipermail/numpy-discussion/2009-April/041691.html在 numpy 邮件列表上对此进行讨论。

关于python - numpy 数组中的整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1970680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com