numpy.left_shift
numpy.left_shift(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'left_shift'>
将整数的位向左移动。
通过在x1的右边附加x2 0,将位向左移动。 由于数字的内部表示形式为二进制格式,因此此操作等效于将x1乘以2 ** x2
。
参数 : | x1 :integer类型的array_like 输入值。 x2 :integer类型的array_like 要附加到x1的零数。 必须为非负数。 如果 则必须将它们广播为通用形状(即输出的形状)。 out :ndarray, None, 或 ndarray的tuple 和 None, 可选 结果存储的位置。 如果提供, 它必须具有输入传递到的shape。 如果未提供或没有,则返回一个新分配的数组。 元组(只能作为关键字参数)的长度必须等于输出的数量。 where :array_like, 可选 此条件通过输入广播。 在条件为True的位置, 将out数组设置为ufunc结果。 在其他地方, out数组将保留其原始值。 请注意,如果通过默认的 则条件为False的数组中的位置将保持未初始化状态。 **kwargs 有关其他仅关键字的参数,请参见ufunc文档。 |
返回值 : | out :integer类型的array 返回x1,其位向左移动x2次。 如果x1和x2均为标量,则为标量。 |
例子
>>> np.binary_repr(5)
'101'
>>> np.left_shift(5, 2)
20
>>> np.binary_repr(20)
'10100'
>>> np.left_shift(5, [1,2,3])
array([10, 20, 40])
注意,第二个参数的dtype可能会改变结果的dtype,在某些情况下可能会导致意外结果(参见强制转换规则):
>>> a = np.left_shift(np.uint8(255), 1) # Expect 254
>>> print(a, type(a)) # Unexpected result due to upcasting
510 <class 'numpy.int64'>
>>> b = np.left_shift(np.uint8(255), np.uint8(1))
>>> print(b, type(b))
254 <class 'numpy.uint8'>