Numpy 未能正确排列数组
Posted
技术标签:
【中文标题】Numpy 未能正确排列数组【英文标题】:Numpy failing to properly square array 【发布时间】:2015-01-23 14:28:27 【问题描述】:我正在尝试映射一个简单的二次函数,其中 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】:问题在于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)
中的值已经溢出。
要解决此问题,请使用 np.int64
数据类型创建 zs
:
zs = np.arange(80262, 80268, dtype=np.int64)
请注意,如果zs
中的数字足够大,同样的问题会再次出现!
【讨论】:
以上是关于Numpy 未能正确排列数组的主要内容,如果未能解决你的问题,请参考以下文章
如何从一个1d Numpy数组的所有排列组合中删除所有的圆台排列组合?