Winkel aus Gradient
Da ich keine Funktion gefunden habe, die zu numpys gradient-Funktion die zugehörigen Winkel von 0 bis 2*pi zurückgibt, hier mal meine Implementierung. Man kann entweder direkt die Rückgabe von gradient übergeben, oder ein beliebiges Array mit allen y-Werten in der ersten und allen x-Werten in der zweiten Spalte (so wie es bei numpy üblich ist).
def get_gradient_angle(gradients):
slope = abs(gradients[0]/ \
gradients[1].astype('float'))
angle = arctan(slope)
positive_y = gradients[0] >= 0
positive_x = gradients[1] >= 0
angle[(positive_y*(1-positive_x))
.nonzero()] = \
pi - angle[(positive_y*(1-positive_x))
.nonzero()]
angle[((1-positive_y)*(1-positive_x))
.nonzero()] += pi
angle[((1-positive_y)*positive_x)
.nonzero()] = \
2*pi - angle[((1-positive_y)*positive_x)
.nonzero()]
return angle
gradient_vectors = [(0, 1), (1, 1), (1, 0), \
(1, -1), (0, -1), (-1, -1), (-1, 0), \
(-1, 1), ]
gradient_data = array(zip(*gradient_vectors))
gradient_angle = get_gradient_angle(
gradient_data)
print gradient_angle * 180/pi
>> python gradient_angles.py
[ 0. 45. 90. 135. 180. 225. 270. 315.]
Funktionen überladen mit Python
Python unterstützt kein function overloading, aber dafür keyword arguments. Dies ist eigentlich kein Nachteil, dennoch gibt es Fälle, in denen nur bestimmte Kombinationen von Übergabeparametern erlaubt sein dürfen. In diesem Beitrag geht es um eine allgemeine Lösung des Problems.
Sehr komfortabel bei Python ist die Möglichkeit, Funktionsparametern einen Standardwert zuzuweisen, der verwendet wird, wenn im Funktionsaufruf eben dieser Parameter nicht angegeben wird (keyword arguments).
print 'hello', name
>> print_name('Alice')
hello Alice
>> print_name()
hello stranger
was ist was
Wozu Google Books alles gut ist... Zumindest muss man hin und wieder mal nach seinem eigenen Namen suchen, um teilweise Erstaunliches zu finden. So wie diesmal: Offenbar sind Florian und ich seit fünf Jahren neben einigen anderen Preisträgern von Jugend forscht in dem "was ist was"-Band "Erfindungen" abgedruckt. Da die Zeit, in der uns diese Reihe begleitet hat, schon etwas her ist, wäre dies fast an uns vorbeigegangen.
Laufen mit nur zwei Nervenzellen
Seit der letzten Woche steht ein interessantes Projekt im Rampenlicht, an dem mein Professor beteiligt ist. Hier die offizielle Pressemitteilung.
Insekten können mit ihren sechs Beinen ganz unterschiedliche Bewegungsmuster ausführen. Je nachdem, ob sie langsam oder schnell krabbeln oder ein Hindernis überwinden müssen, nutzen sie verschiedene Gangarten. Wissenschaftler aus Göttingen haben nun einen Roboter entwickelt, der ebenfalls je nach Umgebung flexibel zwischen mehreren Gangarten hin- und herschalten kann. Das Neue daran: Diese unterschiedlichen Bewegungen werden von einem einzigen Verschaltungsnetzwerk mit nur wenigen Verknüpfungen erzeugt.
Einleitung in Self Organizing Maps
Nachdem in den vorigen Artikeln beschrieben wurde, wie die Aktionsklassifizierung über Event Tables funktionieren soll, geht es nun um das zugehörige Learning-Problem.
Eine verbreitete Learning-Methode sind Neuronale Netze (NN). Im Folgenden geht es um eine besondere Form von NN, nämlich um Self Organizing Maps (SOM).
SOMs bilden mathematisch gesehen einen hochdimensionalen Vektorraum in einen niedrigdimensionalen (in der Regel zweidimensionalen) Raum ab. Man kann beispielsweise ein SOM konstruieren, das Farben (bestehend aus den drei Komponenten Rot, Grün, Blau) auf einer Fläche anordnet. Die besondere Eigenschaft hierbei ist, das Nachbarschaftsbeziehungen erhalten bleiben.


