【问题标题】:Pytorch equivalent of Numpy's logical_and and kin?Pytorch 相当于 Numpy 的 logical_and 和 kin?
【发布时间】:2019-07-02 14:12:59
【问题描述】:

Pytorch 是否有相当于 Numpy 的元素方面的 logical operatorslogical_andlogical_orlogical_notlogical_xor)?在使用 CPU 时,在 Pytorch 张量上调用 Numpy 函数似乎工作得很好,甚至产生一个 Pytorch 张量作为输出。我主要问是因为我认为如果 pytorch 计算在 GPU 中运行,这将不会那么好。

我查看了Pytorch's documentation index 中包含字符串“and”的所有函数,但似乎没有一个相关。

【问题讨论】:

    标签: python numpy pytorch


    【解决方案1】:

    更新:在 Pytorch 1.2 中,PyTorch 引入了torch.bool 数据类型,可以使用torch.BoolTensor

    >>> a = torch.BoolTensor([False, True, True, False])  # or pass [0, 1, 1, 0]
    >>> b = torch.BoolTensor([True, True, False, False])
    
    >>> a & b  # logical and
    tensor([False,  True, False, False])
    
    

    PyTorch 支持对 ByteTensor 的逻辑操作。您可以使用&|^~ 运算符进行逻辑运算,如下所示:

    >>> a = torch.ByteTensor([0, 1, 1, 0])
    >>> b = torch.ByteTensor([1, 1, 0, 0])
    
    >>> a & b  # logical and
    tensor([0, 1, 0, 0], dtype=torch.uint8)
    
    >>> a | b  # logical or
    tensor([1, 1, 1, 0], dtype=torch.uint8)
    
    >>> a ^ b  # logical xor
    tensor([1, 0, 1, 0], dtype=torch.uint8)
    
    >>> ~a  # logical not
    tensor([1, 0, 0, 1], dtype=torch.uint8)
    

    【讨论】:

    • 有趣。我发现将位运算符和逻辑运算符混为一谈令人讨厌,但它对我的用例很有效(例如(x > 0)&(x < 1.5))。不过,它可能并非在所有情况下都有效。
    【解决方案2】:

    逻辑和:

    a * b
    

    逻辑或:

    a + b
    

    【讨论】:

    • 不错,但缺少逻辑不。位运算符现在可能是正式的方式,因为它们已经引入了布尔张量。
    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 2019-09-18
    • 2020-05-05
    • 2019-12-21
    • 2017-09-28
    • 1970-01-01
    • 2019-11-27
    • 2021-12-04
    相关资源
    最近更新 更多