Ich habe zwei Arrays A,B
und möchte das äußere Produkt auf ihre letzte Dimension nehmen,
z.B.
%Code%
wenn result[:,i,j]=A[:,i]*B[:,j]
zweidimensional sind.
Wie kann ich das tun, wenn ich nicht weiß, ob sie zwei- oder dreidimensional sein werden?
In meinem speziellen Problem A,B
sind Scheiben aus einem größeren 3-dimensionalen Array A,B
,
Manchmal kann dies mit ganzzahligen Indizes Z
und anderen Zeiten aufgerufen werden
mit Scheiben A=Z[:,1,:], B=Z[:,2,:]
.
Da scipy Singleton-Dimensionen "quetscht", weiß ich nicht, welche Dimensionen meine Eingaben haben
wird sein.
Das array-outer-product, das ich definieren möchte, sollte
erfüllen %Vor% für beliebige Rang-3-Arrays A=Z[:,1:3,:],B=Z[:,4:6,:]
und ganze Zahlen Y,Z
Die Art von Problem, mit der ich es zu tun habe, beinhaltet ein zweidimensionales räumliches Gitter mit einer vektorwertigen Funktion an jedem Gitterpunkt. Ich möchte in der Lage sein, die Kovarianzmatrix (äußeres Produkt) dieser Vektoren über Regionen zu berechnen, die durch Schnitte in den ersten beiden Achsen definiert sind.
Wenn ich davon ausgehe, dass ich Sie richtig verstanden habe, ist mir vor ein paar Wochen ein ähnliches Problem in meiner Forschung aufgefallen. Ich erkannte, dass das Kronecker-Produkt einfach ein äußeres Produkt ist, das Dimensionalität bewahrt. So könnten Sie so etwas tun:
%Vor% Ich bin mir nicht sicher, welche Form Sie am Ende haben wollen, aber Sie könnten das Array-Slicing in Kombination mit np.rollaxis
, np.reshape
, np.ravel
(usw.) verwenden, um Dinge nach Belieben zu mischen. Ich denke, der Nachteil ist, dass es zusätzliche Berechnungen durchführt. Dies kann oder kann nicht von Bedeutung sein, abhängig von Ihren Einschränkungen.