Python确实可以左移一位大整数
1L << 100
# 1267650600228229401496703205376L
但 NumPy 似乎有一个问题:
a = np.array([1,2,100])
output = np.left_shift(1L,a)
print output
# array([ 2, 4, 68719476736])
有没有办法使用 NumPy 的 left_shift 操作来克服这个问题?单独访问数组元素会产生相同的错误结果:
1L << a[2]
# 68719476736
Python long
值与保存的整数类型不同a
。具体来说,Pythonlong
值不限于 32 位或 64 位,而是可以占用任意数量的内存。
另一方面,NumPy 将创建a
作为一个数组int32
or int64
整数值。当你左移这个数组时,你会得到一个相同数据类型的数组。内存不足以容纳1 << 100
左移的结果会溢出数组中分配的内存,从而产生不正确的结果。
要保存那么大的整数,您必须指定a
拥有object
数据类型。例如:
>>> np.left_shift(1, a.astype(object))
array([2, 4, 1267650600228229401496703205376L], dtype=object)
object
数组可以混合不同类型,包括无限大小的 Pythonlong
/整数值。然而,使用同构数据类型 NumPy 数组时,许多性能优势将会丢失object
arrays.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)