Ich bin süchtig danach, die Vektorisierungsfunktion des Python-Berechnungsmoduls numpy zu verwenden, also ein Memo für mich Übrigens habe ich diesmal diesen Artikel am Beispiel der Erstellung eines Histogramms des Eingabebildes in der Bildverarbeitung veröffentlicht.
Vectorize ist eine Funktion, die eine Python-Funktion so transformiert, dass eine Liste in eine Liste eingefügt werden kann, die einen Wert als Argument verwendet. Jeder Wert des Eingabearrays wird als Argument berechnet und der Rückgabewert wird vektorisiert.
Bereiten Sie zunächst eine Funktion vor, deren Rückgabewert keine Liste ist.
myfunc.py
def myfunc(a,b):
return a+b
print myfunc("hoge","Hoge")
Die Ausgabe sieht folgendermaßen aus:
"hogeHoge"
Betrachten Sie das Eintauchen eines Vektors in diese Myfunc.
myfunc.py
def myfunc(a,b):
return a+b
list = ["hoge","fuga"]
print myfunc(list,"Hoge")
Ich möchte, dass die Ausgabe folgendermaßen aussieht:
["hogeHoge","fugaHoge"]
Aber in der Realität
TypeError: can only concatenate list (not "str") to list
Wird sein. Dies liegt daran, dass ursprünglich nicht definiert wurde, eine Liste als Argument zu verwenden. Sie können die erwartete Ausgabe jedoch erhalten, indem Sie myfunc mit numpy.vectorize vektorisieren.
vfunc=numpy.vectorize(myfunc)
print vfunc(list,"Hoge")
Die Ausgabe ist
["hogeHoge","fugaHoge"]
Die Liste wird zurückgegeben. Nun ist die Vektorisierung der Funktion erreicht.
Ich werde ein praktischeres Beispiel hinterlassen. Erstellen Sie eine Funktion, die durch Bildverarbeitung ein Histogramm des Eingabebilds erstellt.
import numpy as np
import cv2
from matplotlib import pyplot as plt
#Funktion zum Erstellen eines Histogramms
def img_hist(src,bins_array):
x = np.where(src==bins_array,1,0)
count = np.count_nonzero(x)
return count
#Vektorisierung
vhist = np.vectorize(img_hist)
vhist.excluded.add(0) #Das 0. Argument wird als fester Vektor an die Funktion übergeben
#Bereiten Sie eine Quelldatei und einen Bin des Histogramms vor
src = cv2.imread("origin/LENNA.pgm",flags=0)
bins_array = np.arange(256)
#Erstellen Sie ein Histogramm
hist_array=vhist(src,bins_array)
#Visualisieren Sie das Histogramm
plt.plot(bins_array,hist_array)
plt.show()
Das Eingabebild ist ein klassisches
Als Ergebnis wird das folgende Histogramm erhalten.
Recommended Posts