gpt4 book ai didi

python - NumPy 错误 : invalid value encountered in power

转载 作者:太空狗 更新时间:2023-10-29 18:00:28 25 4
gpt4 key购买 nike

我有以下代码:

import numpy

def numpysum(n):
a = numpy.arange(n) ** 2
b = numpy.arange(n) ** 3
c = a + b
return c


size = 3000
c = numpysum(size)

运行时报错:

D:\Work\programming\python\test_1\src\test1_numpy.py:6: RuntimeWarning: invalid value encountered in power b = numpy.arange(n) ** 3

请注意,以下 numpyless 函数可以正常工作:

def pythonsum(n):
a = list(range(n))
b = list(range(n))
c = []
for i in range(len(a)):
a[i] = i ** 2
b[i] = i ** 3
c.append(a[i] + b[i])
return c

我猜这是因为我试图提高一个大数的 3 次方。除了使用 float ,我还能做什么?

我正在使用 Python 3.2。

最佳答案

numpy 实际上会在这方面照顾您。与标准 Python 不同,它的整数运算不适用于任意精度的对象。我猜你运行的是 32 位 python,因为相同的操作对我来说不会溢出:

>>> sys.maxsize
9223372036854775807
>>> size = 3000
>>> c = numpysum(size)
>>>

但他们最终会的。如果您手动控制类型的大小,则更容易看到:

>>> numpy.arange(10, dtype=numpy.int8)**10
__main__:1: RuntimeWarning: invalid value encountered in power
array([ 0, 1, 0, -87, 0, -7, 0, -15, 0, 0], dtype=int8)
>>> numpy.arange(10, dtype=numpy.int16)**10
array([ 0, 1, 1024, -6487, 0, 761, -23552, 15089,
0, 0], dtype=int16)
>>> numpy.arange(10, dtype=numpy.int32)**10
array([ 0, 1, 1024, 59049, 1048576,
9765625, 60466176, 282475249, 1073741824, -2147483648], dtype=int32)
>>> numpy.arange(10, dtype=numpy.int64)**10
array([ 0, 1, 1024, 59049, 1048576,
9765625, 60466176, 282475249, 1073741824, 3486784401])

随着位数的增加,情况会有所改善。如果你真的想对 Python 任意大小的整数进行 numpy 数组操作,你可以将 dtype 设置为对象:

>>> numpy.arange(10, dtype=object)**20
array([0, 1, 1048576, 3486784401, 1099511627776, 95367431640625,
3656158440062976, 79792266297612001, 1152921504606846976,
12157665459056928801], dtype=object)

关于python - NumPy 错误 : invalid value encountered in power,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9140744/

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