大数字作为幂有什么问题吗

  • 本文关键字:问题 数字 arrays numpy math
  • 更新时间 :
  • 英文 :


我正在尝试执行np.log10函数的逆运算。我有一个名为a的numpy数组,其中包含一些值的log10。然而,当我尝试使用10**a时,我会得到奇怪的数字,而使用np.power(10,a)也会得到相同的结果。另一方面,如果我尝试使用像10**42这样的单个数字,它会起作用。为什么?

>>> a=np.array([42,43,44])
>>> a
array([42, 43, 44])
>>> 10**a
array([-6640025486929952768,  7386721425538678784,    80237960548581376])
>>> 10**a[0]
-6640025486929952768
>>> a[0]
42
>>> 10**42
1000000000000000000000000000000000000000000

中的每个numpy数据类型都有一个基于位数的最小值和最大值。从您的输出来看,您的数组似乎具有数据类型np.int64。您可以使用np.iinfo()检查这些最小值/最大值。例如

a = np.array([42,43,44], dtype = 'int64') 
# You can try leaving the dtype blank 
# and see what the default type is
print(a.dtype)
print(np.iinfo(a.dtype))

当您执行10**a[0]时,Python决定将其强制转换为64位整数,如果该值超过最大值,则它将从最大值交叉到最小值,然后继续执行。

10**42工作的原因是Python将这两个值解释为基元类型int,该基元类型没有固定的内存限制,并且可以具有任意的最大值。

您可以对10**int(a[0])执行类似的操作,但不能对整个数组执行此操作。

相关内容

  • 没有找到相关文章

最新更新