Python Numpy无法正确地对数组进行平方运算

Python Numpy无法正确地对数组进行平方运算,python,arrays,function,numpy,perfect-square,Python,Arrays,Function,Numpy,Perfect Square,我试图映射一个简单的二次函数,其中zs是一个numpy数组,R是一个常数 Ns = -np.square(zs) + 2*zs*R+ 3*R**2 它在大多数情况下运行良好,但出于某种原因,每当我将评估设置为以下代码中断时: >>>zs = np.array(range(80262,80268) >>>R = 26756 >>>Ns = -np.square(zs) + 2*zs*R+ 3*R**2 >>>print Ns

我试图映射一个简单的二次函数,其中zs是一个numpy数组,R是一个常数

Ns = -np.square(zs) + 2*zs*R+ 3*R**2
它在大多数情况下运行良好,但出于某种原因,每当我将评估设置为以下代码中断时:

>>>zs = np.array(range(80262,80268)
>>>R = 26756
>>>Ns = -np.square(zs) + 2*zs*R+ 3*R**2
>>>print Ns
array([    642108,    535095,    428080,    321063,    214044
       4295074319], dtype=int64)
数组中的最后一个值应该是107023。每当我超过80267,平方函数就会完全中断,并开始给出非常荒谬的答案。这只是一个数据类型错误,还是我不知道这里发生了什么?

问题是zs=np.arrayRange8026280268创建了一个int32值数组

np.squarezs返回一个与zs数据类型相同的数组,数组中的最后一个平方值会溢出分配给它的四个字节的内存

您可以看到Ns=-np.squarezs+2*zs*R+3*R**2的数据类型为int64,因为NumPy为该数组提供了更多内存以容纳较大的数字。但是,现在已经太迟了:在np.squarezs中已经有一个溢出的值

要解决此问题,请使用np.int64数据类型创建zs:

zs = np.arange(80262, 80268, dtype=np.int64)
请注意,如果zs中的数字足够大,同样的问题将再次发生

问题在于zs=np.arrayRange8026280268创建了一个int32值数组

np.squarezs返回一个与zs数据类型相同的数组,数组中的最后一个平方值会溢出分配给它的四个字节的内存

您可以看到Ns=-np.squarezs+2*zs*R+3*R**2的数据类型为int64,因为NumPy为该数组提供了更多内存以容纳较大的数字。但是,现在已经太迟了:在np.squarezs中已经有一个溢出的值

要解决此问题,请使用np.int64数据类型创建zs:

zs = np.arange(80262, 80268, dtype=np.int64)
请注意,如果zs中的数字足够大,同样的问题将再次发生