Powiązane , ale bardzo różne.
W poniższych przykładach A
i B
nie większy niż 2-by-2 matryc oraz matryc są jednym indeksowane.
Kronecker produkt ma następujące właściwości:
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)
Wyzwanie: Biorąc pod uwagę dwie matryce A
i B
, wróć A⊗B
.
- Rozmiar matryc będzie co najmniej
1-by-1
. Maksymalny rozmiar będzie taki, jaki domyślnie obsługuje Twój komputer / język, ale minimalne5-by-5
dane wejściowe. - Wszystkie wartości wejściowe będą liczbami całkowitymi nieujemnymi
- Wbudowane funkcje do obliczania produktów Kronecker lub produktów Tensor / Outer są niedozwolone
- Ogólnie: Standardowe zasady dotyczące formatu I / O, programu i funkcji, luk itp.
Przypadki testowe:
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
źródło
źródło
;/
może byćẎ
teraz. (funkcja wyzwanie poCJam, 13 bajtów
Jest to nienazwany blok, który oczekuje dwóch matryc na szczycie stosu i pozostawia swój produkt Kronecker na swoim miejscu.
Zestaw testowy.
Wyjaśnienie
To tylko część produktu Kronecker z poprzedniej odpowiedzi , dlatego właśnie tutaj odtwarzam odpowiednie części poprzedniego wyjaśnienia:
Oto krótki przegląd operatorów poprawki CJam do manipulowania listami:
f
oczekuje listy i czegoś innego na stosie i mapuje następujący operator binarny na liście, przekazując drugi element jako drugi argument. Np.[1 2 3] 2 f*
I2 [1 2 3] f*
oba dają[2 4 6]
. Jeśli oba elementy są listami, pierwszy jest mapowany, a drugi służy do curry operatora binarnego.:
ma dwa zastosowania: jeśli podążający za nim operator jest jednoargumentowy, jest to prosta mapa. Na przykład[1 0 -1 4 -3] :z
Jest[1 0 1 4 3]
, gdziez
dostaje moduł liczby. Jeśli podążający za nim operator jest binarny, spowoduje to jego spasowanie . Np .[1 2 3 4] :+
Jest10
..
wektoryzuje operator binarny. Oczekuje dwóch list jako argumentów i stosuje operator do odpowiednich par. Np .[1 2 3] [5 7 11] .*
Daje[5 14 33]
.źródło
MATLAB / Octave,
8342 bajtówZaoszczędź 41 bajtów, dzięki FryAmTheEggman!
Sprawdź to tutaj!
Awaria
arrayfun
jest ukrytą pętlą for, która się zwielokrotnian*B
, dla zmiennejn
zdefiniowanej przez drugi argument. Działa to, ponieważ zapętlanie przez matrycę 2D jest takie samo jak zapętlanie przez wektor. Tj.for x = A
Jest taki sam jakfor x = A(:)
.'un',0
jest równoważne bardziej szczegółowemu'UniformOutput', False
i określa, że dane wyjściowe zawierają komórki zamiast skalarów.cell2mat
służy do konwersji komórek z powrotem do matrycy numerycznej, która jest następnie wyprowadzana.źródło
arrayfun
pętle są liniowe, tak jak mówisz, tak jakby matryca była wektorem, alefor
nie robi tego (zapętla się nad kolumnami tablicy)Pyth,
141211 bajtówTłumaczenie odpowiedzi Jelly , która jest oparta na algorytmie Büttnera (
ü
wymawiane przy próbie zrobieniaee
wydobyć dźwięk [jak w spotkaniu] w ustachoo
dźwięku [jak w bucie]).Wypróbuj online (przypadek testowy 1)!
Premia: oblicz
B⊗A
w tej samej liczbie bajtówWypróbuj online (przypadek testowy 1)!
źródło
Julia,
403937 bajtówWypróbuj online!
Jak to działa
Dla macierzy A i B ,
map(a->a*B,A')
oblicza produktów Kronecker A⊗B .Wynikiem jest wektor bloków matrycy o wymiarach B .
Musimy transponować A (z
'
), ponieważ macierze są przechowywane w porządku głównym kolumny.sum(A^0)
oblicza sumę wszystkich wpisów macierzy tożsamości A wymiarówDla n x n macierzy A , Daje n .Z pierwszego argumentu n ,
hvcat
Łączy n bloków matrycy w poziomie, i wynikające z bloków (większych) w pionie.źródło
J, 10 bajtów
To jedna z możliwych realizacji.
J, 13 bajtów
Jest to podobna implementacja, ale zamiast tego używa zdolności J do definiowania rang. Dotyczy to
*
każdego elementu LHS z całym RHS.Stosowanie
źródło
JavaScript (ES6), 79
Prosta implementacja z zagnieżdżoną pętlą
Test
źródło