Ich versuche, die folgende Funktion auf das Argument vektorisieren tiling
:Python functools.partial mit fester Anordnung bewertet Argument
def find_tile(x,tiling):
"""
Calculates the index of the closest element of 'tiling' to 'x'.
tiling: array of grid positions
x: variable of the same type as the elements of tiling
"""
return np.argmin(np.linalg.norm(tiling - x, axis=1))
Zum Beispiel kann die nicht-vektorisierte Version der Funktion kann die folgenden Argumente akzeptiert
tiling = np.array([[i,j] for i in xrange(3) for j in xrange(3)])
x = np.array([1.2, 2.7])
ich habe Interesse an den schnellstmöglichen Vektorisierung zu finden, so dass x
ein einzelner Vektor bleibt und ich kann eine Liste von Argumenten übergeben tiling
Also versuchte ich mehrere Pflasterungen mit einem Generator definieren:
tilings = (tiling + np.random.uniform(0,1,2) for j in xrange(3))
und dann mit map
und functools.partial
:
map(functools.partial(find_tile, x=x), tilings)
Anscheinend gibt es ein Problem mit x
ist ein Array oder etwas, da ich bin Fehler bekommen:
Kann mir jemand erklären wie man ge t um es herum?
Auch ist es eine Alternative und schneller Weg, um dies (möglicherweise Umschreiben die Funktion find_tile
?) Zu tun