Python是什么>标志

时间:2018-01-14 03:31:48

标签: python scikit-image

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

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

2 个答案:

答案 0 :(得分:5)

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

例如,如果您实现了自己的数组类,则可以使用WITH cte AS ( SELECT c1 FROM t1 ) SELECT * FROM t1 WHERE EXISTS(SELECT 1 FROM cte) -- Only return rows from outer query if there are rows in your cte "table" 来确定一个数组是否比另一个数组长。最好的办法是搜索特定用例的文档并查找运算符。

进一步澄清

想象一下,我创建了一个名为train的类,它只包含一个字符串,我想用>将两列火车粘在一起。 (看起来这样做很好: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()

请注意,我没有使用它来返回true或false,我甚至没有让操作员返回任何内容。对我来说,在我提供的任何文档中记录这一点非常重要,以告诉您__check__ __me__ __check__me__ __me__ 符号的预期用例对我的班级来说是什么。

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

答案 1 :(得分:1)

因为你指出它是一个ndarray,numpy使用元素明智比较的矢量化实现并返回一个布尔掩码,它也将是一个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)

如果使用1D阵列的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