在您的平台上,np.arange返回dtype’int32’的数组:
In [1]: np.arange(1000000).dtypeOut[1]: dtype('int32')数组的每个元素都是32位整数。平方导致结果不适合32位。结果被裁剪为32位,并且仍然解释为32位整数,这就是为什么看到负数的原因。
编辑: 在这种情况下,可以通过在平方之前构造dtype’int64’数组来避免整数溢出:
a=np.arange(1000000,dtype='int64').reshape(1000,1000)
请注意,使用numpy时,发现的问题是固有的危险。您必须谨慎选择dtype,并事先知道您的代码不会导致算术溢出。为了速度起见,numpy不能也不会在出现这种情况时警告您。
有关numpy邮件列表上对此的讨论,请参见http://mail.scipy.org/pipermail/numpy-
discussion/2009-April/041691.html。



