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()
输出:
情形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()
输出:
如果x总是正数且不递减,而2是常量且为正数,那么为什么在numpy中2被提升为正数而得到负输出?你知道吗
你可能要问三个案子。你知道吗
案例1:你只关心最重要的数字
使用浮动。将所有内容转换为
double
精度的浮点值,应该可以达到10300左右。你知道吗如果超过这个值,只存储数字的对数,并使用相应的数学(加法日志=乘法,乘法日志=指数),那么就可以得到高得离谱的数字。你知道吗
案例2:您只关心最小有效数字
我认为这叫做“有限域”或“伽罗瓦”数学?通常用于密码学和其他方面。不幸的是,Numpy似乎没有幂/模函数,因此您需要运行自己的或try a workaround(那里的函数只有在单个操作中没有溢出时才起作用,因此可能无法再次工作)。你知道吗
案例3:你需要所有的数字
你必须使用'bigint'数学,Numpy没有提供。Python整数是很容易的选择。你知道吗
您应该使用Python的power操作符(**),因为当大小超过64位时,即使将numpy dtype更改为int64也没有帮助。而Python的power操作符可以满足您的需要。你知道吗
整数可能溢出了。32位整数只能包含高达~2.1b的值,如果溢出,它将返回负数。你知道吗
设置
dtype=int64
可以解决您的问题。如果不是,就使用python整数(dtype=object
)。它们的效率不高,但它们可以容纳尽可能多的数据。你知道吗相关问题 更多 >
编程相关推荐