当我在Ipython上执行以下内容时:
test = np.array([1,2,3,4])
test**50
它返回:
array([ 1, -2147483648, -2147483648, -2147483648])
具有错误的值和符号。有什么线索我可能会得到这个?
答案 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)