python 负数变正数_numpy正数相乘变负数的解决办法

numpy是一个很好用的python模块,数值运算相当方便。今天遇到了一个小问题,和大家分享一下。先扔个例子。

In [1]: import numpy as np

In [2]: z = np.array([2434,17326,12736,1763])

In [3]: z*1000000

Out[3]: array([-1860967296, 146130816, -148901888, 1763000000])

嗯???两个整数相乘居然出现了负数!!!

找了几个帖子,发现是由于数据超限了。python3的官网里造就生命,int表示整型和长整型整数,可以根据实际情况选择合适的类型,但是我忽略了numpy自定义的数据类型。

numpy里默认的数值类型是int32,范围是-2147483648~2147483647,在超过这个范围之后不会报错,而是继续计算,一种情况是像上述的代码一样,出现负值,一眼就看出来有问题;但是有时候只是计算结果不对,不细心的根本发现不了,比如第二个元素运行结果错误,17326*1000000=146130816。解决办法就是在定义数组的时候指定输出格式,int64位的范围-9223372036854775808~9223372036854775807,基本上能满足所有的数据计算要求。

In [4]: z = np.array([2434,17326,12736,1763],dtype='int64')

In [5]: z*1000000

Out[5]: array([ 2434000000, 17326000000, 12736000000

你可能感兴趣的:(python,负数变正数)