Numpy数组,幂运算符,错误值/符号

时间:2017-01-17 06:39:06

标签: python numpy ipython

当我在Ipython上执行以下内容时:

test = np.array([1,2,3,4])
test**50

它返回:

array([          1, -2147483648, -2147483648, -2147483648])

具有错误的值和符号。有什么线索我可能会得到这个?

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,这是因为整数数据类型溢出。 Numpy使用低级int数据类型初始化数组,因为它符合您提供的数据。

test = np.array([1,2,3,4])
test.dtype
# dtype('int32')

test[0] = 2**31 - 1  # works
test[0] = 2**31      # OverflowError: Python int too large to convert to C long

使用32位有符号整数(在我的系统上),它可以保存-2147483648和2147483647之间的值。

您可以强制数组具有不同的数据类型,例如浮点:

test = np.array([1, 2, 3, 4], dtype=float)
# test = np.array([1.0, 2.0, 3.0, 4.0])  # this is the same
test**50

# array([  1.00000000e+00,   1.12589991e+15,   7.17897988e+23, 1.26765060e+30])

这是一个list of data types,可以作为字符串传递给dtype参数。

如果你想要Python的大整数而不是浮点精度,那么这也适用(性能警告):

test = np.array([1,2,3,4], dtype=object)
test**50

# array([1, 1125899906842624, 717897987691852588770249, 
#        1267650600228229401496703205376], dtype=object)