我正在尝试执行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])
执行类似的操作,但不能对整个数组执行此操作。