【问题标题】:In Pytorch, is there a difference between (x<0) and x.lt(0)?在 Pytorch 中,(x<0) 和 x.lt(0) 有区别吗?
【发布时间】:2021-07-02 01:04:52
【问题描述】:

假设x 是 Pytorch 中的一个张量。可以写:

x_lowerthanzero = x.lt(0)

或:

x_lowerthanzero = (x<0)

看起来完全相同的结果。许多其他操作具有 Pytorch 内置等效项:x.gt(0) 用于 (x&gt;0)x.neg() 用于 -xx.mul() 等。

是否有充分的理由使用一种形式而不是另一种形式?

【问题讨论】:

    标签: python pytorch operator-overloading


    【解决方案1】:

    他们are equivalent&lt; 只是一个更易读的别名。

    Python 运算符有canonical function mappings 例如:

    代数运算

    Operation Syntax Function
    Addition a + b add(a, b)
    Subtraction a - b sub(a, b)
    Multiplication a * b mul(a, b)
    Division a / b truediv(a, b)
    Exponentiation a ** b pow(a, b)
    Matrix Multiplication a @ b matmul(a, b)

    比较

    Operation Syntax Function
    Ordering a &lt; b lt(a, b)
    Ordering a &lt;= b le(a, b)
    Equality a == b eq(a, b)
    Difference a != b ne(a, b)
    Ordering a &gt;= b ge(a, b)
    Ordering a &gt; b gt(a, b)

    您可以检查这些确实映射到分别命名的火炬函数here 例如:

    def __lt__(self, other):
        return self.lt(other)
    

    【讨论】:

    • @Gulzar 我回答了问题标题:“在 Pytorch 中,(x通常存在于 python 中的原因相同 - 方便、更易读的别名。
    【解决方案2】:

    通常没有理由使用其中一个,它们主要是为了方便:其中许多方法确实有一个 out 参数,它可以让你指定一个张量来保存结果,但是你也可以使用运算符而不是方法来做到这一点。

    【讨论】:

    • 你有没有参考支持“没有理由使用一个而不是另一个”
    • 不,我不知道:如果您查看implementation,您会发现运算符甚至是根据这些方法定义的。可能是因为这些方法是用C实现的,然后运算符是用python实现的,调用C-api。
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2017-02-28
    • 2016-03-23
    • 2021-06-16
    相关资源
    最近更新 更多