Aturan broadcasting dari Chapter Aturan Broadcasting berlaku seragam untuk array dua dimensi, tiga dimensi, dan seterusnya. Yang berubah hanyalah jumlah pasangan dimensi yang perlu diperiksa — dan itu justru menjadi sumber kebingungan paling umum. Bab ini melatih pembacaan perluasan pada bentuk yang lebih tinggi dengan data penjualan berlapis: dua kuartal, tiga cabang, empat produk.
Yang akan kita latih:
- Perluasan baris
(1, 4)dan perluasan kolom(3, 1)pada array 2-D. - Perluasan vektor
(4,)dan matriks(3, 4)ke array 3-D(2, 3, 4). - Prosedur membaca penyelarasan bentuk langkah demi langkah.
Perluasan baris dan kolom pada array 2-D #
Array (3, 4) dapat diperluas dari dua arah yang berbeda. Kita jalankan keduanya berdampingan:
import numpy as np
a = np.arange(1, 13).reshape(3, 4)
baris = np.array([[10, 20, 30, 40]])
kolom = np.array([[100], [200], [300]])
print(a + baris)
print(a + kolom)Output yang Dihasilkan:
[[11 22 33 44]
[15 26 37 48]
[19 30 41 52]]
[[101 102 103 104]
[205 206 207 208]
[309 310 311 312]]- Baris 3 (
a): matriks(3, 4)berisi angka 1 sampai 12, baris demi baris. - Baris 4 (
baris): nested list dengan satu baris menghasilkan bentuk(1, 4); penyelarasan(3, 4)versus(1, 4)memperluas baris tunggal ke tiga baris. - Baris 5 (
kolom): nested list dengan satu kolom menghasilkan bentuk(3, 1); penyelarasan(3, 4)versus(3, 1)memperluas kolom tunggal ke empat kolom. - Baris 7-8: hasil pertama menambahkan nilai sama pada seluruh kolom di satu baris; hasil kedua menambahkan nilai sama pada seluruh baris di satu kolom.
Bentuk keduanya sama-sama (3, 4), tetapi arah pengaruh nilainya berbeda — baris menyerang secara horizontal per baris, kolom menyerang secara vertikal per kolom.
Perluasan ke array tiga dimensi #
Sekarang kita tambah satu lapis: (2, 3, 4) berarti dua kuartal, tiga cabang, empat produk. Vektor (4,) dan matriks (3, 4) sama-sama dapat beroperasi dengannya:
import numpy as np
kuartal = np.arange(24).reshape(2, 3, 4)
vektor = np.array([1, 2, 3, 4])
matriks = np.arange(12).reshape(3, 4)
print(kuartal + vektor)
print(kuartal + matriks)Output yang Dihasilkan:
[[[ 1 3 5 7]
[ 5 7 9 11]
[ 9 11 13 15]]
[[13 15 17 19]
[17 19 21 23]
[21 23 25 27]]]
[[[ 0 2 4 6]
[ 8 10 12 14]
[16 18 20 22]]
[[12 14 16 18]
[20 22 24 26]
[28 30 32 34]]]- Baris 3 (
kuartal): array 3-D berisi 0 sampai 23; lapisan pertama adalah kuartal pertama. - Baris 4-5 (
vektor,matriks):vektorberbentuk(4,),matriksberbentuk(3, 4). - Baris 7 (
kuartal + vektor):(4,)dilengkapi menjadi(1, 1, 4); setiap baris empat angka di kedua kuartal mendapat tambahan1, 2, 3, 4. - Baris 8 (
kuartal + matriks):(3, 4)dilengkapi menjadi(1, 3, 4); kedua kuartal menerima perluasan virtual matriks yang sama, sehingga kuartal kedua identik dengan kuartal pertama ditambah 12.
Perhatikan pola penting pada hasil kedua: dimensi depan yang “hilang” pada operand kecil diperluas ke seluruh lapisan. Matriks yang sama dibaca ulang oleh tiap kuartal tanpa pernah disalin.
Membaca penyelarasan langkah demi langkah #
Untuk bentuk apa pun, prosedurnya selalu sama:
- Tulis bentuk kedua operand berdampingan.
- Selaraskan dari kanan; lengkapi dimensi yang tidak dimiliki dengan angka
1. - Periksa tiap pasangan dimensi: harus sama, atau salah satunya bernilai
1. - Bentuk hasil mengambil nilai terbesar per dimensi; dimensi bernilai
1diperluas secara virtual.
Tabel berikut menerapkan prosedur itu pada seluruh operasi bab ini:
| Operasi | Penyelarasan | Bentuk hasil |
|---|---|---|
(3, 4) + (1, 4) | (3, 4) versus (1, 4) | (3, 4) |
(3, 4) + (3, 1) | (3, 4) versus (3, 1) | (3, 4) |
(2, 3, 4) + (4,) | (2, 3, 4) versus (1, 1, 4) | (2, 3, 4) |
(2, 3, 4) + (3, 4) | (2, 3, 4) versus (1, 3, 4) | (2, 3, 4) |
Dua kebiasaan dari prosedur ini patut dilatih. Pertama, tuliskan bentuk kedua operand sebelum menulis operasi — sebagian besar error broadcasting bermula dari salah membaca bentuk, bukan dari aturan yang keliru. Kedua, ingat bahwa hanya dimensi bernilai 1 yang diperluas; dimensi lain yang tidak sama langsung ditolak, seperti pasangan 4 lawan 3 pada contoh error bab sebelumnya.