在Python 3中,两个正数的乘法得到一个负数的输出[英] Multiplication of two positive numbers gives a negative output in Python 3

本文是小编为大家收集整理的关于在Python 3中,两个正数的乘法得到一个负数的输出的处理方法,想解了在Python 3中,两个正数的乘法得到一个负数的输出的问题怎么解决?在Python 3中,两个正数的乘法得到一个负数的输出问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个dataframe 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,

其中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.

考虑到可以分配给int32的最大值是2147483647,我怀疑numpy认为type(thr) = <int32>应该是type(thr) = <int32>.这有意义吗?

请注意,我没有编写生成df1的代码,因为

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

其他推荐答案

如果您获得count()的类型(即type(df1['wght'].count())),您将收到:

<class 'numpy.int32'>

因此,请尝试使用:

n = df1['wght'].count().astype(np.int64)
n*(n-1)*2

其他推荐答案

您可以将df1['wght'].count()传递给这样的长构造函数,以确保它长.

N = long(df1['wght'].count())

虽然存储到任何变量

N = df1['wght'].count() 

应作为class int具有__mul__方法(实现 *),在需要时产生长期结果.

也有python 3.x具有"统一"的int和long,也照顾了错误.

本文地址:https://www.itbaoku.cn/post/1727920.html