在 Python 3 中,两个正数相乘会得到负输出

2024-04-30

我有一个数据框df1 :

df1.head() = 

             wght          num_links 
id_y  id_x                      
 3     133   0.000203          2      
       186   0.000203          2 
 5     6     0.000203          2      
       98    0.000203          2      
       184   0.000203          2

我需要计算一个名为thr,

thr = N*(N-1)*2,

where N是行数df1.

问题是当我计算时thr,Python 抛出负值(尽管所有输入都是正值):

ipdb> df1['wght'].count()*(df1['wght'].count()-1)*2
-712569744 

可能的提示

行数 N 是

ipdb> df1['wght'].count() 
137736 

所以,

ipdb> 137736*137735*2
37942135920.

考虑到可以分配给 a 的最大值int32 is 2147483647,我怀疑 NumPy 认为type(thr) = <int32>,当它应该是<int64>。这有道理吗?

请注意,我还没有编写生成的代码df1 because

ipdb> df1['wght'].count() 
137736

但是,如果需要重现该错误,请告诉我。

提前致谢。


你正在经历np.int32溢出,所以只需使用len(df)代替df.column.count().

这是一个小演示:

In [149]: x = pd.DataFrame(np.random.randint(0,100,size=(137736, 3)), columns=list('ABC'))

In [150]: x.A.count() * (x.A.count() - 1) * 2
Out[150]: -712569744

In [151]: len(x) * (len(x) - 1) * 2
Out[151]: 37942135920

In [153]: type(x.A.count())
Out[153]: numpy.int32

In [154]: type(len(x))
Out[154]: int
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 3 中,两个正数相乘会得到负输出 的相关文章

随机推荐