加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

平方数字Python时奇怪的错误

发布时间:2020-12-20 11:03:44 所属栏目:Python 来源:网络整理
导读:正如我之前的其他人一样,我正试图从R过渡到 Python.为了做到这一点,我只是试图在Python中复制简单的任务只是为了对代码充满信心. 我试图在Python中创建一个非常简单的循环. 这里的代码: import numpy as npimport matplotlib as mpk=np.repeat(0,100000,axi
正如我之前的其他人一样,我正试图从R过渡到 Python.为了做到这一点,我只是试图在Python中复制简单的任务只是为了对代码充满信心.

我试图在Python中创建一个非常简单的循环.

这里的代码:

import numpy as np
import matplotlib as mp
k=np.repeat(0,100000,axis=0)
for x in np.arange(1,100001,1):
    k[x-1]=(x**2)
mp.pyplot.plot(k)

输出就是这个

Python Graph

这看起来很奇怪,我只是正数,我为什么得到负值?

这里,R中的任务相同

k<-rep(0,100000)
for (i in 1:100000){
k[i]<-i^2
}
plot(k,type="l")

和相对输出

R Graph

谁能解释一下这里发生了什么?

非常感谢您的帮助.

解决方法

因为整数溢出.

Numpy假设数组中的所有元素都是int32,因此有些元素在平方时溢出:

k = np.repeat(0,axis=0)
print(k.dtype)
# int32
for x in np.arange(1,1):
    k[x - 1] = (x ** 2)
print(k[k < 0])
# [-2147479015 -2147386332 -2147293647 ...,-537551     -352192 -166831]

这可以通过要求Numpy(很好地)使用np.int64作为其元素的数据类型来解决.

你的代码也没有那么高效,因为它使用了一个显式的for循环(将由Python解释器执行),而不是利用Numpy的执行C代码的矢量化能力,因此更快,更短(在此案例一行):

k = np.array(range(1,100001),dtype=np.int64) ** 2 
# or k = np.arange(1,1,dtype=np.int64) ** 2
mp.pyplot.plot(k)

生成

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读