Terkait , tetapi sangat berbeda.
Dalam contoh di bawah ini, A
dan B
akan menjadi 2-oleh-2 matriks, dan matriks satu-diindeks.
Sebuah Kronecker produk memiliki sifat sebagai berikut:
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)
Tantangan: Diberikan dua matriks, A
dan B
, kembali A⊗B
.
- Ukuran matriks setidaknya akan menjadi
1-by-1
. Ukuran maksimum adalah apa pun yang dapat ditangani oleh komputer / bahasa Anda secara default, tetapi5-by-5
input minimum . - Semua nilai input akan berupa bilangan bulat non-negatif
- Fungsi bawaan yang menghitung produk Kronecker atau produk Tensor / Outer tidak diizinkan
- Secara umum: Aturan standar tentang format I / O, program & fungsi, celah dll.
Kasus uji:
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
sumber
sumber
;/
bisaẎ
sekarang. (fitur tantangan postdate?)CJam, 13 byte
Ini adalah blok tanpa nama yang mengharapkan dua matriks di atas tumpukan dan meninggalkan produk Kronecker di tempatnya.
Suite uji.
Penjelasan
Ini hanya bagian produk Kronecker dari jawaban sebelumnya , oleh karena itu saya di sini hanya mereproduksi bagian yang relevan dari penjelasan sebelumnya:
Berikut ini gambaran umum singkat operator infiks CJam untuk manipulasi daftar:
f
mengharapkan daftar dan sesuatu yang lain di stack dan memetakan operator biner berikut dari daftar, meneruskan elemen lain sebagai argumen kedua. Misalnya[1 2 3] 2 f*
dan2 [1 2 3] f*
keduanya memberi[2 4 6]
. Jika kedua elemen adalah daftar, yang pertama dipetakan dan yang kedua digunakan untuk menjelajah operator biner.:
memiliki dua kegunaan: jika operator mengikutinya unary, ini adalah peta sederhana. Misalnya[1 0 -1 4 -3] :z
adalah[1 0 1 4 3]
, di manaz
mendapatkan modulus nomor. Jika operator mengikutinya adalah biner, ini akan melipat operator sebagai gantinya. Misalnya[1 2 3 4] :+
adalah10
..
membuat vektor operator biner. Ini mengharapkan dua daftar sebagai argumen dan berlaku operator untuk pasangan yang sesuai. Misalnya[1 2 3] [5 7 11] .*
memberi[5 14 33]
.sumber
MATLAB / Oktaf,
8342 BytesDisimpan 41 byte, terima kasih kepada FryAmTheEggman!
Uji di sini!
Kerusakan
arrayfun
adalah for-loop yang disamarkan yang mengalikann*B
, untuk variabel yangn
didefinisikan oleh argumen kedua. Ini bekerja karena perulangan melalui matriks 2D sama dengan perulangan melalui vektor. Yaitufor x = A
sama denganfor x = A(:)
.'un',0
setara dengan lebih banyak verbose'UniformOutput', False
, dan menentukan bahwa output mengandung sel, bukan skalar.cell2mat
digunakan untuk mengubah sel kembali ke matriks numerik, yang kemudian dikeluarkan.sumber
arrayfun
loop linear seperti yang Anda katakan, seakan matriks yang vektor, tetapifor
tidak tidak (itu loop atas kolom dari array)Pyth,
141211 byteTerjemahan dari jawaban Jelly , yang didasarkan pada Algoritma Büttner (
ü
diucapkan ketika mencoba membuatee
suara [seperti dalam temu] dalam bentuk mulut darioo
suara [seperti pada saat boot]).Cobalah online (test case 1)!
Bonus: menghitung
B⊗A
dalam jumlah byte yang samaCobalah online (test case 1)!
sumber
Julia,
403937 byteCobalah online!
Bagaimana itu bekerja
Untuk matriks A dan B , hitung
map(a->a*B,A')
produk Kronecker A⊗B .Hasilnya adalah vektor dari blok matriks dengan dimensi B .
Kita harus mengubah urutan A (dengan
'
) karena matriks disimpan dalam urutan kolom-utama.sum(A^0)
menghitung jumlah semua entri dari matriks identitas dimensi A. Untuk n × n matriks A , ini menghasilkan n .Dengan argumen pertama n ,
hvcat
menggabungkan n blok matriks secara horizontal, dan blok yang dihasilkan (lebih besar) secara vertikal.sumber
J, 10 byte
Ini adalah salah satu implementasi yang mungkin.
J, 13 byte
Ini adalah implementasi yang serupa, tetapi alih-alih menggunakan kemampuan J untuk menentukan peringkat. Ini berlaku
*
antara setiap elemen pada LHS dengan seluruh RHS.Pemakaian
sumber
JavaScript (ES6), 79
Implementasi langsung dengan loop berulang
Uji
sumber