Numpy未能正确排列阵列

时间:2014-11-25 14:23:37

标签: 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
array([    642108,    535095,    428080,    321063,    214044
       4295074319], dtype=int64)

数组中的最后一个值应该是107023.每当我超过80267时,平方功能完全断开并开始给我绝对荒谬的答案。这只是一个数据类型错误,还是我不知道的其他事情?

1 个答案:

答案 0 :(得分:5)

问题是zs = np.array(range(80262,80268))会创建一个int32值数组。

np.square(zs)返回与zs具有相同数据类型的数组,并且数组中的最终平方值溢出了已分配的四个字节的内存。

您看到Ns = -np.square(zs) + 2*zs*R+ 3*R**2的数据类型为int64,因为NumPy为此数组提供了更多内存以容纳更大的数字。但是,为时已晚:您已在np.square(zs)中拥有溢出值。

要解决此问题,请使用zs数据类型

创建np.int64
zs = np.arange(80262, 80268, dtype=np.int64)

请注意,如果zs中的数字足够大,会再次出现同样的问题!