Python 对数字进行平方运算时出现奇怪的错误
和我之前的其他人一样,我正在尝试从R转换到Python。为了做到这一点,我只是尝试在Python中复制简单的任务,以便对代码有信心 我试图用Python创建一个非常简单的循环 代码如下:Python 对数字进行平方运算时出现奇怪的错误,python,r,numpy,32-bit,Python,R,Numpy,32 Bit,和我之前的其他人一样,我正在尝试从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) 输出就是这个 这看起来很
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)
输出就是这个
这看起来很奇怪,我只是将正数平方,为什么会得到负值
在这里,同样的任务在R
k<-rep(0,100000)
for (i in 1:100000){
k[i]<-i^2
}
plot(k,type="l")
k因为整数溢出
Numpy假设数组中的所有元素都是int32
,因此当平方时,一些元素会溢出:
k = np.repeat(0, 100000, axis=0)
print(k.dtype)
# int32
for x in np.arange(1, 100001, 1):
k[x - 1] = (x ** 2)
print(k[k < 0])
# [-2147479015 -2147386332 -2147293647 ..., -537551 -352192 -166831]
产生
我无法复制您的问题-我看到的曲线与您的R示例相同。你可以用k=np.arange(1100001,1)**2更容易地创建k
,我不知道它是否有用,但我正在anaconda DistributionTanks上使用spyder,如何创建浮点向量?我有一个64位版本的Python 3.6.4 | anaconda custom(64位)|(默认,2018年1月16日,10:22:32)[MSC v.1900 64位(AMD64)]类型“版权”、“信用证”或“许可证”以获取更多信息。IPython 6.2.1——一个增强的交互式Python.1,即使代码为k=np。重复(0,100000,axis=0)。np.arange(1100001,1)中x的astype(float):k[x-1]=(x**2)mp.pyplot.plot(k)@MarcoDeVirgilis将我的更新答案视为一个有效的解决方案和一个更高效的代码
k = np.array(range(1, 100001), dtype=np.int64) ** 2
# or k = np.arange(1, 100001, 1, dtype=np.int64) ** 2
mp.pyplot.plot(k)