为什么当x在numpy中增加时,2上升到x会给出负值?

2024-05-16 15:21:04 发布

您现在位置:Python中文网/ 问答频道 /正文

Numpy将包含提升为自然数的2的列表的数组作为负值。2怎么可能被提升到正数,比如1000是负数?你知道吗

我有一个数组'x',我们用来绘制从1到n的x轴值。 对于数组x中的每个值,我们取x**(2**x),即x提升到(2提升到x),并将其用作y轴值。你知道吗

情形1:对于x∈[1,50)

我使用了下面的代码,输出是正确的,因为的输出中没有负值np.功率(2,x)。你知道吗

x = np.array([x for x in range(1, 50)])

print(np.power(2, x))
x2x =  np.power(x, np.power(2, x)) 


plt.plot(x, x, label = 'f(n) = n')
plt.plot(x, x2x, label = 'f(n) = x**(2**x)')

plt.legend()
plt.show()

输出: No negative values in the output

Link to output

情形2:对于x∈[1100]

我使用了下面的代码,并且在的输出中有负值np.功率(2,x)等等np.功率(十),np.功率(2,x))

x = np.array([x for x in range(1, 100)])

print(np.power(2, x))
x2x =  np.power(x, np.power(2, x)) 


plt.plot(x, x, label = 'f(n) = n')
plt.plot(x, x2x, label = 'f(n) = x**(2**x)')

plt.legend()
plt.show()

输出: Negative values in the output

Link to output

如果x总是正数且不递减,而2是常量且为正数,那么为什么在numpy中2被提升为正数而得到负输出?你知道吗


Tags: 代码forplotnpplt数组功率array
3条回答

你可能要问三个案子。你知道吗

案例1:你只关心最重要的数字

使用浮动。将所有内容转换为double精度的浮点值,应该可以达到10300左右。你知道吗

>>> 3 ** np.array([2, 10, 50, 100], dtype=np.float)
array([9.00000000e+00, 5.90490000e+04, 7.17897988e+23, 5.15377521e+47])

如果超过这个值,只存储数字的对数,并使用相应的数学(加法日志=乘法,乘法日志=指数),那么就可以得到高得离谱的数字。你知道吗

>>> math.log(3) * 50
54.93061443340549
>>> math.log(3) * 50 == math.log(3 ** 50) == math.log(717897987691852588770249)
True

案例2:您只关心最小有效数字

我认为这叫做“有限域”或“伽罗瓦”数学?通常用于密码学和其他方面。不幸的是,Numpy似乎没有幂/模函数,因此您需要运行自己的或try a workaround(那里的函数只有在单个操作中没有溢出时才起作用,因此可能无法再次工作)。你知道吗

>>> [pow(3, n, 2 ** 16 + 1) for n in [2, 10, 50, 100]]  # modulo some random prime
[9, 59049, 12911, 33330]

案例3:你需要所有的数字

你必须使用'bigint'数学,Numpy没有提供。Python整数是很容易的选择。你知道吗

>>> 3 ** np.array([2, 10, 50, 100], dtype=np.object)
array([9, 59049, 717897987691852588770249,
       515377520732011331036461129765621272702107522001], dtype=object)

您应该使用Python的power操作符(**),因为当大小超过64位时,即使将numpy dtype更改为int64也没有帮助。而Python的power操作符可以满足您的需要。你知道吗

x**(2**x)

整数可能溢出了。32位整数只能包含高达~2.1b的值,如果溢出,它将返回负数。你知道吗

设置dtype=int64可以解决您的问题。如果不是,就使用python整数(dtype=object)。它们的效率不高,但它们可以容纳尽可能多的数据。你知道吗

相关问题 更多 >