【问题标题】:np.arange() can't be squared properly [duplicate]np.arange() 无法正确平方[重复]
【发布时间】:2017-10-21 07:01:25
【问题描述】:

我在 PyCharm 中尝试了一些东西,所以我写了一段简单的代码,包括:

xlist = np.arange(99995,99996)
print(xlist*xlist)
>>> array([1409065433])

如您所见,答案不正确!我应该得到 9999000025。我偶然发现了这个,因为我最初是这样写的:

xlist = np.arange(0,100000)

for x in xlist:
    print(x)
    z = x * x
    print(z)
print(xlist*xlist)

得到了许多奇怪的结果,包括 x 大约 90000 的负值

我的三个朋友测试了这段代码,其中两个得到了与我相同的结果(在 Windows 上),另一个在 Linux 上得到了正确的结果,所以它似乎与操作系统有关......

有人知道这是怎么回事吗?

【问题讨论】:

  • Python3 整数是任意精度的。 Numpy int 默认为 32 位或 64 位,因此它们不能任意大并且可能发生溢出。
  • 在此之前指定:dtype=np.int64
  • @AndrasDeak:不一定是 64 位的。这取决于平台。

标签: python numpy


【解决方案1】:

9999000025 不适合 32 位整数。与常规 Python 整数不同,NumPy 数据类型是固定大小的,并且它们可以容纳的值是有限制的。

这里的解决方法是指定dtype=np.int64

x = np.arange(99995,99996, dtype=np.int64)
print(x * x)
Out[155]: array([9999000025])

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 2017-05-10
    • 1970-01-01
    • 2011-04-15
    • 2018-01-26
    • 2014-11-08
    • 1970-01-01
    • 2012-11-09
    • 2020-02-20
    相关资源
    最近更新 更多