尝试在Python 3.6.5中计算长整数的幂,并且我得到0。这是预期的行为吗?然后它与官方文档矛盾。
lambda_handler
答案 0 :(得分:0)
仅当i
不是int
时,才会发生这种情况。通过运行以下命令可以找到i
的类型:
print(type(i))
__pow__()
方法。因此,如果没有更多细节,很难知道发生了什么。
我已经能够通过以下方式重现类似的行为:
import numpy as np
i = np.int64(4294967296)
print (i**2)
但它还会显示警告:
__main__:3: RuntimeWarning: overflow encountered in long_scalars
这种行为在numpy中是正常的,因为它使用溢出语义定义了一个有限的整数类型。 np.int64
只有64位,而指数运算的高位被简单地丢弃。由于4294967296 = 2 32 ,因此(2 32 ) 2 太大,无法容纳64位。由于唯一的非零位是太高的64位,因此在溢出后只剩下零位。这对于numpy整数类型是正常的。
numpy.int64
溢出时甚至没有警告。
答案 1 :(得分:0)
鉴于所提供的信息很少,重现此行为的唯一方法是创建一个覆盖__pow__
方法的自定义类。
例如,
>>> class myInt(int):
... def __pow__(self,x):
... return 0
...
>>> i = myInt(16777216)
>>> i
16777216
>>> i**2
0
>>> float(i)**2
281474976710656.0
答案 2 :(得分:0)
也许这个问题可以解决。实际上,我上面的变量不是Python int类型。这是解释。
df = df['count'].unstack([2,3], fill_value=0).sort_index(axis=1)
print (df)
param1 0 1 2
param2 a x d a
user1 user2
2 6 0 1 0 0
4 13 0 0 0 3
21 76 2 0 1 0