Python Numpy无法正确地对数组进行平方运算
我试图映射一个简单的二次函数,其中zs是一个numpy数组,R是一个常数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
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中的数字足够大,同样的问题将再次发生