我正在将代码从Matlab转换为Python。 Matlab中的代码是:

x = find(sEdgepoints > 0 & sNorm < lowT);
sEdgepoints(x)=0;


这两个数组的大小相同,基本上是在创建蒙版。

我读到here,numpy中的nonzero()等同于find(),因此我使用了它。在Python中,我将dstc用于sEdgepoints,将dst用于sNorm。我也直接输入了lowT =60。因此,代码是

x = np.nonzero(dstc > 0 and dst < 60)
dstc[x] = 0


但是,我得到以下错误:

Traceback (most recent call last):
File "C:\Python27\Sheet Counter\customsobel.py", line 32, in <module>
    x = np.nonzero(dstc > 0 and dst < 60)
ValueError: The truth value of an array with more than one element is
ambiguous. Use a.any() or a.all()


我读到有关a.any()/ a.all()in this post的用法,但不确定如何工作。因此,我有两个问题:
1.如果可以,使用哪个数组?
2.如果我是正确的但它不起作用,如何转换代码?

最佳答案

and进行布尔运算,而numpy希望您进行按位运算,因此您必须使用&

x = np.nonzero((dstc > 0) & ( dst < 60))

10-07 15:41