Pandas & NumPy Academy · Pelajaran

Aturan Broadcasting

Pahami aturan broadcasting NumPy agar Anda dapat menjumlahkan array 1-D ke setiap baris array 2-D tanpa menyalin secara eksplisit

Pelajaran 3 dari 413 langkah

Aturan Broadcasting adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Masalah yang Diselesaikan Broadcasting

Broadcasting memungkinkan NumPy menggabungkan array dengan bentuk yang berbeda tetapi kompatibel tanpa menyalin data—array yang lebih kecil direntangkan agar sesuai dengan array yang lebih besar.

import numpy as np

# Adding a scalar to an array is the simplest broadcast
a = np.array([1, 2, 3])
print(a + 10)  # [11 12 13]
# Scalar 10 is 'broadcast' to shape (3,)

Aturan Broadcasting 1: Tambahkan 1 di Depan

NumPy menyelaraskan bentuk dari kanan. Jika salah satu array memiliki lebih sedikit dimensi, NumPy menambahkan 1 di sebelah kiri—sehingga array (3,) diperlakukan seperti (1, 3) saat dipasangkan dengan array (4, 3).

import numpy as np

m = np.ones((4, 3))
v = np.array([10, 20, 30])  # shape (3,) -> treated as (1, 3)

result = m + v   # shape (4, 3)
print(result)
# [[11. 21. 31.]
#  [11. 21. 31.]
#  [11. 21. 31.]
#  [11. 21. 31.]]

Aturan Broadcasting 2: Rentangkan Dimensi Berukuran 1

Dimensi apa pun yang berukuran 1 dapat direntangkan agar sesuai dengan array lainnya—tanpa menyalin data sebenarnya. Kedua array dapat merentangkan dimensinya yang berukuran 1 secara bersamaan.

import numpy as np

# (3, 1) + (1, 4)  -->  (3, 4)
col = np.array([[1], [2], [3]])    # shape (3, 1)
row = np.array([[10, 20, 30, 40]]) # shape (1, 4)
print((col + row).shape)  # (3, 4)
print(col + row)

Aturan Broadcasting 3: Bentuk Tidak Kompatibel

Jika dua dimensi tidak sama dan keduanya bukan 1, broadcasting gagal dengan ValueError. Memeriksa bentuk terlebih dahulu menghasilkan error yang jelas, bukan bug yang tidak terlihat.

import numpy as np

a = np.ones(3)
b = np.ones(4)
try:
    a + b
except ValueError as e:
    print(e)
# operands could not be broadcast together with shapes (3,) (4,)

Praktik: Mengurangi Rata-rata Kolom

Teknik klasik: kurangi rata-rata setiap kolom dari setiap baris untuk memusatkan data Anda. Dengan keepdims=True, rata-rata mempertahankan bentuk yang dapat digunakan dalam broadcasting dengan baik.

import numpy as np

data = np.array([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

col_mean = data.mean(axis=0)          # shape (3,)
centred = data - col_mean             # broadcast along axis 0
print(centred)
# [[-3. -3. -3.]
#  [ 0.  0.  0.]
#  [ 3.  3.  3.]]

Praktik: Normalisasi Baris

Untuk membuat jumlah setiap baris menjadi 1, bagi baris tersebut dengan jumlahnya. Gunakan keepdims=True agar jumlahnya tetap berbentuk (n, 1) dan dapat digunakan dalam broadcasting pada seluruh kolom.

import numpy as np

m = np.array([[1., 2., 3.],
              [4., 5., 6.]])

row_sums = m.sum(axis=1, keepdims=True)  # shape (2, 1)
normed = m / row_sums
print(normed.round(3))
# [[0.167 0.333 0.5  ]
#  [0.267 0.333 0.4  ]]

Perkalian Luar melalui Broadcasting

Ubah bentuk satu array menjadi (n, 1) dan array lainnya menjadi (1, m), lalu kalikan—broadcasting akan membangun matriks perkalian luar lengkap untuk Anda, tanpa memerlukan perulangan.

import numpy as np

a = np.array([1, 2, 3])
b = np.array([10, 20, 30, 40])

outer = a[:, np.newaxis] * b[np.newaxis, :]
print(outer)
# [[ 10  20  30  40]
#  [ 20  40  60  80]
#  [ 30  60  90 120]]

Broadcasting dengan Array 3-D

Broadcasting dapat digunakan pada dimensi apa pun. Sekumpulan gambar berbentuk (100, 28, 28) dapat dipusatkan menggunakan rata-rata per piksel berbentuk (1, 28, 28)—NumPy merentangkan angka 1 tersebut.

import numpy as np

batch = np.random.rand(100, 28, 28)  # 100 images
pixel_mean = batch.mean(axis=0, keepdims=True)  # (1, 28, 28)
centred = batch - pixel_mean          # (100, 28, 28)
print(centred.shape)  # (100, 28, 28)

np.broadcast_to untuk Perentangan Eksplisit

np.broadcast_to menunjukkan dengan tepat hasil broadcasting, sebagai tampilan hanya-baca tanpa penyalinan. Fungsi ini sangat cocok untuk membayangkan cara bentuk-bentuk tersebut diselaraskan.

import numpy as np

a = np.array([1, 2, 3])
view = np.broadcast_to(a, (4, 3))
print(view)
# [[1 2 3]
#  [1 2 3]
#  [1 2 3]
#  [1 2 3]]
print(view.flags.writeable)  # False

Memvisualisasikan Bentuk yang Kompatibel

Aturan praktis: sejajarkan bentuk dari kanan dan periksa setiap pasangan. Bentuk-bentuk tersebut kompatibel jika sama atau salah satunya adalah 1. Prediksikan bentuk sebelum menjalankan kode!

# Shape compatibility examples:
# (3, 4) + (   4) -> (3, 4)  OK: 4==4, 1 implied
# (3, 4) + (3, 1) -> (3, 4)  OK: 4 vs 1, 3==3
# (2, 3, 4) + (3, 4) -> (2, 3, 4)  OK
# (3, 4) + (3,  ) -> ERROR: 4 vs 3
import numpy as np
print(np.zeros((3,4)).shape)       # (3, 4)
print((np.zeros((3,4)) + np.zeros(4)).shape)  # (3, 4)

Kesalahan Umum dalam Broadcasting

Kesalahan broadcasting yang paling umum adalah lupa menambahkan keepdims=True setelah agregasi, sehingga bentuk-bentuknya tidak selaras. Jika bingung, cetak print(arr.shape) untuk melihat keadaan sebenarnya.

import numpy as np

m = np.arange(6).reshape(2, 3)
row_max = m.max(axis=1)            # shape (2,)  NOT (2,1)
print(row_max.shape)               # (2,)
# m - row_max  -> ERROR: shapes (2,3) and (2,) misalign

row_max_col = row_max[:, np.newaxis]  # shape (2, 1)
print((m - row_max_col).shape)     # (2, 3)  OK

Pemeriksaan Cepat

Uji pemahaman Anda tentang aturan broadcasting NumPy dari pelajaran ini.

Ringkasan Pelajaran

Anda sudah menguasainya! Broadcasting merentangkan dimensi berukuran 1, membandingkan bentuk dari kanan, dan keepdims=True mempertahankan sumbu agar perhitungan tetap selaras. Berikutnya: masking boolean.

Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Aturan Broadcasting” gratis?

Ya — teks lengkap “Aturan Broadcasting” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Aturan Broadcasting”?

Pahami aturan broadcasting NumPy agar Anda dapat menjumlahkan array 1-D ke setiap baris array 2-D tanpa menyalin secara eksplisit Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Aturan Broadcasting” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Fungsi Universal (ufunc)
  2. Fungsi Agregasi
  3. Aturan Broadcasting
  4. Masking Boolean dan Pengindeksan Lanjutan
← Kembali ke Pandas & NumPy Academy