Verwandte , aber sehr unterschiedlich.
In den nachfolgenden Beispielen sind, A
und B
wird 2-mal-2 - Matrix sein, und die Matrizen sind eint indexiert.
Ein Kronecker- Produkt hat folgende Eigenschaften:
A⊗B = A(1,1)*B A(1,2)*B
A(2,1)*B A(2,2)*B
= A(1,1)*B(1,1) A(1,1)*B(1,2) A(1,2)*B(1,1) A(1,2)*B(1,2)
A(1,1)*B(2,1) A(1,1)*B(2,2) A(1,2)*B(2,1) A(1,2)*B(2,2)
A(2,1)*B(1,1) A(2,1)*B(1,2) A(2,2)*B(1,1) A(2,2)*B(1,2)
A(2,2)*B(2,1) A(2,2)*B(1,2) A(2,2)*B(2,1) A(2,2)*B(2,2)
Herausforderung: Bei zwei Matrizen A
und B
zurück A⊗B
.
- Die Größe der Matrizen wird mindestens sein
1-by-1
. Die maximale Größe ist die Größe, die Ihr Computer / Ihre Sprache standardmäßig verarbeiten kann, jedoch die minimale5-by-5
Eingabe. - Alle Eingabewerte sind nicht negative Ganzzahlen
- Eingebaute Funktionen zur Berechnung von Kronecker-Produkten oder Tensor / Outer- Produkten sind nicht zulässig
- Im Allgemeinen: Standardregeln für E / A-Format, Programm und Funktionen, Lücken usw.
Testfälle:
A =
1 2
3 4
B =
5 6
7 8
A⊗B =
5 6 10 12
7 8 14 16
15 18 20 24
21 24 28 32
B⊗A =
5 10 6 12
15 20 18 24
7 14 8 16
21 28 24 32
------------------------
A =
1
2
B =
1 2
A⊗B =
1 2
2 4
------------------------
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
B =
1 1
0 1
A⊗B =
16 16 2 2 3 3 13 13
0 16 0 2 0 3 0 13
5 5 11 11 10 10 8 8
0 5 0 11 0 10 0 8
9 9 7 7 6 6 12 12
0 9 0 7 0 6 0 12
4 4 14 14 15 15 1 1
0 4 0 14 0 15 0 1
B⊗A =
16 2 3 13 16 2 3 13
5 11 10 8 5 11 10 8
9 7 6 12 9 7 6 12
4 14 15 1 4 14 15 1
0 0 0 0 16 2 3 13
0 0 0 0 5 11 10 8
0 0 0 0 9 7 6 12
0 0 0 0 4 14 15 1
------------------------
A = 2
B = 5
A⊗B = 10
code-golf
math
linear-algebra
matrix
Stewie Griffin
quelle
quelle
;/
kannẎ
jetzt sein. (Feature Postdates Challenge?)CJam, 13 Bytes
Dies ist ein unbenannter Block, der zwei Matrizen oben auf dem Stapel erwartet und das Kronecker-Produkt an seiner Stelle belässt.
Testsuite.
Erläuterung
Dies ist nur der Kronecker-Produktteil aus der vorherigen Antwort , daher reproduziere ich hier nur die relevanten Teile der vorherigen Erklärung:
Hier ist eine kurze Übersicht über die Infix-Operatoren von CJam für die Listenmanipulation:
f
erwartet eine Liste und etwas anderes auf dem Stapel und ordnet den folgenden binären Operator der Liste zu, wobei das andere Element als zweites Argument übergeben wird. ZB[1 2 3] 2 f*
und2 [1 2 3] f*
beide geben[2 4 6]
. Wenn beide Elemente Listen sind, wird das erste zugeordnet und das zweite zum Curryen des Binäroperators verwendet.:
hat zwei Verwendungszwecke: Wenn der Operator, der ihm folgt, unär ist, ist dies eine einfache Karte. ZB[1 0 -1 4 -3] :z
ist[1 0 1 4 3]
, woz
bekommt der Modul einer Zahl. Wenn die Bediener es folgenden binär sind, wird dies klappt die Bediener statt. ZB[1 2 3 4] :+
ist10
..
vektorisiert einen binären Operator. Es erwartet zwei Listen als Argumente und wendet den Operator auf entsprechende Paare an. ZB[1 2 3] [5 7 11] .*
gibt[5 14 33]
.quelle
MATLAB / Oktave,
8342 BytesGespeichert 41 Bytes, dank FryAmTheEggman!
Testen Sie es hier!
Nervenzusammenbruch
arrayfun
ist eine getarnte for-Schleife, die sichn*B
für einen
durch das zweite Argument definierte Variable multipliziert . Dies funktioniert, weil das Durchlaufen einer 2D-Matrix mit dem Durchlaufen eines Vektors identisch ist. Dhfor x = A
ist das gleiche wiefor x = A(:)
.'un',0
entspricht dem ausführlicheren'UniformOutput', False
und gibt an, dass die Ausgabe Zellen anstelle von Skalaren enthält.cell2mat
wird verwendet, um die Zellen zurück in eine numerische Matrix zu konvertieren, die dann ausgegeben wird.quelle
arrayfun
Schleifen linear wie Sie sagen, als ob die Matrix ein Vektor waren, aberfor
tut nicht (es Schleifen über Spalten des Arrays)Pyth,
141211 BytesÜbersetzung der Jelly-Antwort , die auf dem Büttner-Algorithmus basiert (
ü
ausgesprochen, wenn versucht wird, einenee
Ton [wie im Meet] in der Mundform einesoo
Sounds [wie im Boot] zu erzeugen).Probieren Sie es online aus (Testfall 1)!
Bonus: Berechnen Sie
B⊗A
in der gleichen Anzahl von BytesProbieren Sie es online aus (Testfall 1)!
quelle
Julia,
403937 BytesProbieren Sie es online aus!
Wie es funktioniert
Für Matrizen A und B ,
map(a->a*B,A')
berechnet das Kronecker - Produkt A⊗B .Das Ergebnis ist ein Vektor von Matrixblöcken mit den Abmessungen B .
Wir müssen A (mit
'
) transponieren, da Matrizen in Spalten-Hauptreihenfolge gespeichert sind.sum(A^0)
berechnet die Summe aller Einträge der Identitätsmatrix der Dimensionen von A. Für eine n × n- Matrix A ergibt dies n .Mit dem ersten Argument n werden n Matrixblöcke horizontal und die resultierenden (größeren) Blöcke vertikal
hvcat
verkettet .quelle
J, 10 Bytes
Dies ist eine mögliche Implementierung.
J, 13 Bytes
Dies ist eine ähnliche Implementierung, verwendet jedoch die Fähigkeit von J, Ränge zu definieren. Es gilt
*
zwischen jedem Element auf der linken Seite mit der gesamten rechten Seite.Verwendung
quelle
JavaScript (ES6), 79
Einfache Implementierung mit verschachtelter Schleife
Prüfung
quelle