2016-05-06 9 views
1

Gibt es eine Möglichkeit, diese Schritte zu kombinieren, so dass ich die Effizienz durch Reduzierung der Anzahl der Iterationen verbessern kann.Kombinieren von Schritten

first_cut_new=first_cut-res 
first_cut_depth[first_cut_depth>min_value+150]=0 
first_cut_depth[first_cut_depth>0]=1 
first_cut_depth_3D=np.dstack((first_cut_depth,first_cut_depth,first_cut_depth)) 
first_cut_final= first_cut_depth_3D * first_cut_new 
+0

Welche Formen haben die beteiligten Eingänge? – Divakar

+0

first_cut - (600,600,3); res- (600,600,3); Tiefe (600,600) – user4543816

+0

Können Sie Ihren Code teilen? Bis zu dem, was Sie getan haben. – kanayamalakar

Antwort

2

Ansatz # 1

Für mich sieht die Ineffizienz wie in den letzten beiden Schritten zu sein. So könnte man vermeiden first_cut_depth_3D zu schaffen und zu first_cut_final mit on the fly Datenreplikation erhalten und elemente Multiplikation mit NumPy broadcasting, wie so -

first_cut_new = first_cut-res 
first_cut_depth[first_cut_depth>min_value+150]=0 
first_cut_depth[first_cut_depth>0]=1 
first_cut_final = first_cut_depth[...,None]*first_cut_new 

Ansatz # 2 (für RGB-Eingang Arrays)

Wenn first_cut_depth RGB-Bilddaten sein sollen, hat es nur positive Werte. So kann man das für eine viel effizientere Einzeiler-Lösung ausnutzen, so -

first_cut_final = (first_cut_depth <= min_value+150)[...,None]*(first_cut-res) 
+0

Wie ist es mit diesen beiden Schritten? First_cut_depth [first_cut_depth> min_value + 150] = 0 first_cut_depth [first_cut_depth> 0] = 1 – user4543816

+0

@ user4543816 Ich würde diese behalten. Diese scheinen nicht der Flaschenhals für mich zu sein. – Divakar

+0

ok danke ..Let mich versuchen – user4543816