Nachdem ich gelernt habe, einsum
zu verwenden, versuche ich nun zu verstehen, wie np.tensordot
funktioniert.
Allerdings bin ich ein wenig verloren, insbesondere was die verschiedenen Möglichkeiten für den Parameter axes
betrifft.
Um es zu verstehen, habe ich, da ich den Tensor-Kalkül nie praktiziert habe, das folgende Beispiel benutzt:
%Vor% In diesem Fall, was sind die verschiedenen möglichen np.tensordot
und wie würden Sie es manuell berechnen?
Die Idee mit tensordot
ist ziemlich einfach - Wir geben die Arrays und die entsprechenden Achsen ein, auf denen die Summenreduktionen liegen sollen. Die Achsen, die an der Summenreduzierung beteiligt sind, werden in der Ausgabe entfernt, und alle übrigen Achsen von den Eingangsarrays werden als verschiedene Achsen im Ausgangssignal ausgebreitet, wobei die Reihenfolge der Eingangsarrays beibehalten wird gefüttert.
Sehen wir uns einige Beispielfälle mit einer oder zwei Achsen der Summenreduktionen an und vertauschen auch die Eingabeplätze und sehen, wie die Reihenfolge in der Ausgabe erhalten bleibt.
Eingaben:
%Vor%Fall # 1:
%Vor%Fall Nr. 2 (wie Fall Nr. 1, aber die Eingänge werden getauscht):
%Vor%Eingaben:
%Vor%Fall # 1:
%Vor%Fall # 2:
%Vor%Wir können dies auf so viele Achsen wie möglich ausdehnen.
tensordot
tauscht Achsen und formatiert die Eingaben so, dass np.dot
auf 2 2d-Arrays angewendet werden kann. Es tauscht dann und kehrt zum Ziel zurück. Es kann leichter sein zu experimentieren als zu erklären. Es gibt keine spezielle Tensormathematik, sondern nur dot
, um in höheren Dimensionen zu arbeiten. tensor
bedeutet nur Arrays mit mehr als 2d. Wenn Sie sich mit einsum
bereits auskennen, vergleichen Sie am einfachsten die Ergebnisse.
Ein Beispieltest, der auf 1 Achsenpaar summiert
%Vor%ein anderer, summierend auf zwei.
%Vor% Wir könnten dasselbe mit dem Paar (1,0)
machen. Angesichts der Mischung der Dimensionen glaube ich nicht, dass es eine andere Kombination gibt.
Tags und Links python linear-algebra numpy tensor dot-product