我正在将代码从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))