【问题标题】:Python 3.6.1 - Numpy.power returns negative values for cube powers of positive int numbersPython 3.6.1 - Numpy.power 返回正整数的立方幂的负值
【发布时间】:2018-04-12 15:19:51
【问题描述】:

如果我问 Python 1963 的立方幂,我会得到:

In[1]: 1963**3
Out[1]: 7564163347

但如果我定义一个数组并要求 numpy.power 返回我得到的立方幂:

In[1]: a=nu.array([1, 3, 5, 1963])
In[2]: nu.power(a)
Out[2]: array([1, 27, 125, -1025771245], dtype=int32)

为什么它会正确返回一些数字而不能正确返回其他数字?我需要将所有数字标记为原始数组中的浮点数吗?为什么数组有问题,而我直接求立方幂却没有问题(例如1961**3)?

我注意到这是可行的:

In[1]: a=nu.array([1, 3, 5, 1963.0])
In[2]: nu.power(a)
Out[2]: array([1.00000000e+00, 2.70000000e+01, 1.25000000e+02, 7.56416335e+09])

谢谢!

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

发生这种情况是因为 1963 的立方大于可以存储在 32 位整数中的最大数 (2,147,483,647)。

您需要告诉 numpy 使用 64 位整数进行此操作,您可以通过指定 dtype 参数来执行此操作:

a = nu.array([1, 3, 5, 1963], dtype="int64")

或者像这样使用long python 类型:

a = nu.array([1, 3, 5, 1963L])

两者都给出正确的输出:

>>> nu.power(a, 3) array([1, 27, 125, 7564163347], dtype=int64)

编辑: 这样做时不会发生这种情况的原因:

1963**3

是因为 Python 会自动将输出转换为 long 类型。

编辑2: 抱歉,Python 3 没有单独的 long 类型,只有第一个示例适用于 Python 3,两者都是有效的 Python 2。

【讨论】:

  • 谢谢,添加 dtype=int64 正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2015-09-06
  • 2021-07-17
  • 2014-05-22
  • 1970-01-01
相关资源
最近更新 更多