.. dalam satu baris! euh, maksudnya 1 statement.
hasil = map(lambda index:
sum(
map(lambda n: n[0] * n[1],
zip(
[a[i * 4 + (index % 4)] for i in range(4)], # baris
[b[(index / 4) * 4 + i] for i in range(4)] # kolom
) # pasangan elemen baris dan kolom
) # kalikan setiap pasangan
), # jumlahkan
range(4*4))
Input adalah dua buah matrix berukuran 4 × 4, yaitu a dan b, dan hasilnya tentu saja matrix 4 × 4 juga yang ada di dalam variabel hasil.
Ketiga matrix ini ditulis dalam bentuk array 1 dimensi dari elemen-elemen yang ada dengan menjejerkan kolom-kolom yang ada. Sebagai contoh, matrix di bawah ini
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
akan ditulis dalam variabel berupa [1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16].
Kalau mau dibalik (urut baris), tukar saja a dan b. Tuk perkalian matrix n x n, ganti saja 4 menjadi n tersebut.
Mohon dikoreksi kalau ada yg salah. Hasil nyoba2 membandingkan hasilnya dg hasil perhitungan dg GNU Octave sih bener.. :D
Jadi pengen latihan functional programming..
2 komentar:
latihan emacs lisp (dance)
Gyaaa, masih trauma dengan kurung-kurung waktu ber-LISP ria di tingkat 1.. :D
Poskan Komentar