mars.tensor.invert#
- mars.tensor.invert(x, out=None, where=None, **kwargs)[来源]#
逐元素计算位反转,或位非。
计算输入张量中整数的底层二进制表示的按位取反。这个ufunc实现了C/Python运算符
~.对于带符号的整数输入,返回的是二进制补码。在二进制补码系统中,负数由绝对值的二进制补码表示。这是计算机上表示带符号整数的最常见方法 1。一个 N 位的二进制补码系统可以表示从 \(-2^{N-1}\) 到 \(+2^{N-1}-1\) 的每一个整数。
- Parameters
x (array_like) – 仅处理整数和布尔类型。
out (Tensor, None, 或 tuple 的 Tensor 和 None, 可选) – 结果存储的位置。如果提供,它必须具有和输入相同的广播形状。如果未提供或None,将返回一个新分配的张量。元组(仅作为关键字参数可能)必须具有与输出数量相等的长度。
where (array_like, 可选) – 值为 True 表示在该位置计算 ufunc,值为 False 表示保持输出中的该值不变。
**kwargs –
- Returns
out – 结果。
- Return type
类数组对象
另请参阅
备注
bitwise_not 是 invert 的别名:
>>> import mars.tensor as mt
>>> mt.bitwise_not is mt.invert True
参考文献
- 1
维基百科,“二的补码”, http://en.wikipedia.org/wiki/Two’s_complement
示例
我们已经看到 13 被表示为
00001101。 那么 13 的反转或按位取反为:>>> mt.invert(mt.array([13], dtype=mt.uint8)).execute() array([242], dtype=uint8)
结果取决于位宽:
>>> mt.invert(mt.array([13], dtype=mt.uint16)).execute() array([65522], dtype=uint16)
当使用带符号整数类型时,结果是无符号类型结果的二进制补码:
>>> mt.invert(mt.array([13], dtype=mt.int8)).execute() array([-14], dtype=int8)
布尔值也是被接受的:
>>> mt.invert(mt.array([True, False])).execute() array([False, True])