2017-07-08 72 views
2

我將Matlab中的代碼轉換爲Python。在Matlab中的代碼是:將matlab中的find()轉換爲python

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

這兩個陣列的大小相同,我基本上創建一個面具。

我讀here非零()在numpy相當於find(),所以我用它。在Python中,我擁有sEdgepoints的dstc和sNorm的dst。我也直接放在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的使用()/年。所有()in this post,我不知道如何工作。所以,我有兩個問題: 1.如果它確實使用哪個數組? 2.如果我是正確的,它不起作用,如何轉換代碼?

回答

1

and做布爾運算和numpy的希望你做位運算,所以你必須使用&

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

嘗試np.argwhere() (和注意的()周圍的不平等的重要性):

>>X=np.array([1,2,3,4,5]) 
>>Y=np.array([7,6,5,4,3]) 
>>ans = np.argwhere((X>3) & (Y<7)) 
>>ans 

array([[3], 
    [4]]) 
+0

這是行得通的,但對不起,我不能贊成,因爲我的聲譽是不夠的。謝謝! – Epsilon7

+0

沒問題 - 我也在那裏。很高興你有一個解決方案! – qbzenker