Python > 是什么意思

Python what does > sign

我最近找到了这部分代码: filteredImage = image > filters.threshold_otsu(image)

在大多数语言中 image > filters.threshold_otsu(image) 会 return truefalse。在这种情况下 filteredImagendarray。那么这段代码到底发生了什么?

Python 允许运算符重载。因此,您最好查阅您的特定用例的文档 - 正如评论所指出的,这里是一个布尔掩码,但是 python 允许您使用任何运算符来做几乎任何您喜欢的事情。

例如,如果您实现了自己的数组 class,则可以使用 > 来确定一个数组是否比另一个数组长的 class。最好的办法是搜索特定用例的文档并查找运算符。

进一步说明

假设我制作了一个名为 train 的 class,它只包含一根绳子,我想使用 > 将两列火车粘在一起。 (看起来这样做会很好 :P)

class Train:

    def __init__(self, cargo):
        self.cargo = cargo

    def __call__(self):
        print("__{0}__".format(self.cargo))

    def __gt__(self, another):
        self.cargo = "{0}__{1}".format(self.cargo, another.cargo)

# Make two trains
a = Train("check")
b = Train("me")
a()
b()

# Join the trains and print again
a > b
a()
b()

哪个会输出

__check__
__me__
__check__me__
__me__

请注意,我没有使用它来 return 真或假,我什至没有让运算符 return 成为任何东西。在我提供的任何文档中记录这一点对我来说很重要,以告诉您 > 符号的预期用例对我的 class.

这是一个非常有用的功能,一直在使用(例如 numpy 库中的乘法 - python 不能原生乘法 numpy.arrays)。

因为你指出它是一个 ndarray,numpy 使用元素明智比较的矢量化实现和 returns 一个布尔掩码,它也将是一个 numpy 数组。一个例子:

a = np.array([1,2,7,8,9])

b = np.array([1,2,3,4,5])

a <= b

array([ True,  True, False, False, False], dtype=bool)

如果对一维数组使用 for 循环,这几乎等同于以下内容:

k = []
for i,j in zip(a,b):
    k.append(i<=j)
k = np.array(k)

array([ True,  True, False, False, False], dtype=bool)

Numpy 支持几乎所有的运算符。有关更多信息和逻辑功能,您可以查看 Documentation