2017-07-08 4 views
2

Ich konvertiere einen Code von Matlab zu Python. Der Code in Matlab ist:Konvertieren von find() in Matlab zu Python

Beide Arrays sind von gleicher Größe, und ich bin im Grunde eine Maske erstellen.

Ich lese here, dass nicht-null() in numpy äquivalent ist zu finden(), also habe ich das verwendet. In Python habe ich dstc für sEdgepoints und dst für sNorm. Ich habe auch in lowt direkt gestellt = 60. So war der Code

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

Aber ich folgende Fehlermeldung:

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() 

ich über die Verwendung von a.any read()/a. all() in this post, und ich bin mir nicht sicher, wie das funktionieren wird. Also, ich habe zwei Fragen: 1. Wenn ja, welches Array zu verwenden? 2. Wenn ich richtig bin und es nicht funktioniert, wie kann ich den Code konvertieren?

Antwort

1

and tut boolean Betrieb und numpy erwartet Sie bitweise Operation zu tun, so dass Sie & dh

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

Versuchen np.argwhere() (und beachten Sie die Bedeutung der() um die Ungleichheiten):

>>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

Das funktioniert, aber leider kann ich nicht upvote, da mein Ruf nicht genug ist. Vielen Dank! – Epsilon7

+0

Kein Problem - ich war auch dort. Froh, dass du eine Lösung hast! – qbzenker

0

Sie könnten es selbst implementieren möchten:

x = [[i,j] for i, j in zip(sEdgepoints , sNorm) if i > 0 and j < lowT] 

Wird Ihnen eine Liste von Listen entsprechend Ihren die passenden Einschränkungen. Ich denke, das ist vielleicht nicht genau das, wonach Sie suchen.

Vielleicht am Pandas Modul aussehen, macht es bequemer als normale Python oder numpy Maskierung: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mask.html

Verwandte Themen