美文网首页python
numpy正数相乘变负数的解决办法

numpy正数相乘变负数的解决办法

作者: xiaoji_hb | 来源:发表于2020-09-28 17:25 被阅读0次

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,  1763000000], dtype=int64)

其实还有另外一种解决办法,可以使用科学计数法。

In [6]: z*1e6
Out[6]: array([2.4340e+09, 1.7326e+10, 1.2736e+10, 1.7630e+09])

这种书写方式虽然能避免一些问题,但是在创建数组的时候,最好根据自己的数据情况,选择合适的数据类型,尽量少挖坑。

参考文章:

[1] https://blog.csdn.net/CxsGhost/article/details/103834353
[2] https://numpy.org/doc/stable/

#如有侵权,请告知删除#
#如有错误,欢迎指正#

相关文章

  • numpy正数相乘变负数的解决办法

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

  • 有理数加减

    正数加正数,负数加负数,正数加负数正数减负数,负数减正数负数减负数,正数减正数。 以上是有理数的加减 在同号时绝对...

  • 原码反码补码移码

    转换目标转换方式原码转反码正数不变负数,符号位不动,尾数逐位求反原码变补码正数不变负数,先求反码,然后在尾数加1移...

  • 负数

    负数是什么?负数就是,比0少的就叫做复数。正数是什么?正数就是比零大的。所以零他既不是负数,也不是正数。而是负数与...

  • 思维导图初中数学第一章有理数1-1正数与负数

    1正数和负数的定义 (1)正数:像4,1.8%,3.5这样大于0的数叫做正数. (2)负数:像-3,-2.7%,-...

  • 七年级数学上册第一二章复习

    第一章 有理数 1.1 正数与负数 ①正数:大于0的数叫正数。(根据需要,有时在正数前面也加上“+”) ②负数:在...

  • 二进制的原码和补码

    先验知识 正数的符号位是0 负数的符号位是1 正数的原码=反码=补码 负数的补码=负数的反码+1 负数的反码是由负...

  • 正数负数引发的思考

    今天在听数学课时,讲到有理数的乘法时,让大家去发现正数乘正数、正数乘负数、负数乘负数的规律时,其中有一个问题...

  • 位运算 >> 与 >>> 的区别

    1.正数无区别 2.负数>>高位补1,>>>高位补0 导致负数使用>>>位移操作后变为正数,而>>操作后还是负数。

  • 正数与负数

    今天我们的第一课是学习正数与负数,首先在做题前,我们要了解0,正数,负数。 我当中写的0,在正数与负数中,它既不是...

网友评论

    本文标题:numpy正数相乘变负数的解决办法

    本文链接:https://www.haomeiwen.com/subject/wcfjuktx.html