Ich schreibe eine Funktion für Regionen, die in einem unregelmäßigen Raster wachsen: Beginnen Sie in einem Startfach, suchen Sie die benachbarten Behälter und fügen Sie sie in den Satz der zurückgegebenen Behälterindizes ein, wenn eine bestimmte Anforderung erfüllt ist. Ich möchte, dass die Anforderung willkürlich ist, z. B. '> 2', '> = 2', '== 2' usw. Die Syntax wäre also:
myregion = get_region(bin_coordinates, bin_values, seed_bin, '> 2')
und der Bereich benachbarter Bins, deren Werte größer als 2 sind, wird zurückgegeben.
Im Wesentlichen suche ich nach der gleichen Funktionalität wie in der Pandas-Bibliothek, in der Folgendes möglich ist, wenn ein HDF-Speicher abgefragt wird:
store.select('dfq',where="A>0 or C>0")
Ich könnte natürlich eine Art Parser mit if / else-Anweisungen schreiben, um '> 2' in Code zu übersetzen, aber ich habe mich gefragt, ob es einen eleganteren Weg gibt?
Verwenden Sie ein Lambda (eine anonyme Funktion), z. B. Lambda x: x> 2. Deklarieren Sie getregion als zB getregion (Koordinaten, Werte, testfun) und nennen Sie es zB getregion (diese Datensätze, diese Werte, Lambda x: x> 2). Verwenden Sie dann in getregion den Test zB if testfun (Wert). Wählen Sie jedoch einen besseren Namen als testfun, der beschreibt, was ein Ergebnis von True bedeutet.
Ein anderer Ansatz wäre, einige "Standard" -Bewertungsfunktionen zu definieren und ihren Namen an getregion zu übergeben, z
def gt2(x):
return (x>2)
Deklarieren Sie getregion wie für das Lambda-Beispiel:
def getregion( coordinates, values, testfun ):
...
if testfun(x):
...
und rufen Sie getregion so auf:
getregion(thesecoordinates, thesevalues, gt2 )
HTH Barny
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen