【问题标题】:Numpy failing to properly square arrayNumpy 未能正确排列数组
【发布时间】: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 时,平方函数就会完全中断并开始给我绝对荒谬的答案。这只是一个数据类型错误,还是这里发生了我不知道的其他事情?

【问题讨论】:

    标签: python arrays function numpy perfect-square


    【解决方案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 中的数字足够大,同样的问题会再次出现!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      相关资源
      最近更新 更多