Verwenden Sie einen Dope-Vektor, um auf beliebige axiale Schichten eines mehrdimensionalen Arrays zuzugreifen?

Ich erstelle eine Funktionssuite, um mit einem @ zu arbeite multidimensional-array Datenstruktur und ich möchte in der Lage sein, beliebige @ zu definier Scheiben der Arrays, damit ich ein verallgemeinertes inneres Produkt zweier beliebiger Matrizen implementieren kann (aka Tensors oder n-d Arrays).

Eine von mir gelesene APL-Arbeit (ich kann ehrlich gesagt nicht finden, welche - ich habe so viele gelesen) definiert das Matrixprodukt auf der linken MatrixX mit AbmessungenA;B;C;D;E;F und rechte MatrixY mit AbmessungenG;H;I;J;K woF==G wi

Z <- X +.× Y
Z[A;B;C;D;E;H;I;J;K] <- +/ X[A;B;C;D;E;*] × Y[*;H;I;J;K]

wo+/ istdie Summe vo und × wenden Element für Element auf zwei Vektoren gleicher Länge an.

So brauche ich "Zeilen" -Scheiben von links und "Spalten" -Scheiben von rechts. Ich kann natürlich eine Transponierung und dann ein "Zeilen" -Slice machen, um ein "Spalten" -Slice zu simulieren, aber ich würde es lieber eleganter machen.

Wikipedia-Artikel über slicing führt zu einem Stub überdope vectors Das scheint das Wundermittel zu sein, nach dem ich suche, aber es gibt nicht viel, was ich tun könnte.

Wie verwende ich einen Dope-Vektor, um willkürliches Schneiden zu implementieren?

(Viel später habe ich bemerktStride eines Arrays die einige Details hat.)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage