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:

python
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:

text
[[11 22 33 44]
 [15 26 37 48]
 [19 30 41 52]]
[[101 102 103 104]
 [205 206 207 208]
 [309 310 311 312]]
  1. Baris 3 (a): matriks (3, 4) berisi angka 1 sampai 12, baris demi baris.
  2. Baris 4 (baris): nested list dengan satu baris menghasilkan bentuk (1, 4); penyelarasan (3, 4) versus (1, 4) memperluas baris tunggal ke tiga baris.
  3. Baris 5 (kolom): nested list dengan satu kolom menghasilkan bentuk (3, 1); penyelarasan (3, 4) versus (3, 1) memperluas kolom tunggal ke empat kolom.
  4. 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:

python
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:

text
[[[ 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]]]
  1. Baris 3 (kuartal): array 3-D berisi 0 sampai 23; lapisan pertama adalah kuartal pertama.
  2. Baris 4-5 (vektor, matriks): vektor berbentuk (4,), matriks berbentuk (3, 4).
  3. Baris 7 (kuartal + vektor): (4,) dilengkapi menjadi (1, 1, 4); setiap baris empat angka di kedua kuartal mendapat tambahan 1, 2, 3, 4.
  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:

  1. Tulis bentuk kedua operand berdampingan.
  2. Selaraskan dari kanan; lengkapi dimensi yang tidak dimiliki dengan angka 1.
  3. Periksa tiap pasangan dimensi: harus sama, atau salah satunya bernilai 1.
  4. Bentuk hasil mengambil nilai terbesar per dimensi; dimensi bernilai 1 diperluas secara virtual.

Tabel berikut menerapkan prosedur itu pada seluruh operasi bab ini:

OperasiPenyelarasanBentuk 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.