b belajar.myudak

Bentuk hasil broadcasting

Diberikan dua bentuk (shape) array a dan b sebagai list bilangan bulat. Kembalikan bentuk hasil A + B menurut aturan broadcasting NumPy, atau None jika keduanya tidak kompatibel.

Jangan pakai np.broadcast_shapes: tujuan soal ini adalah menuliskan aturannya sendiri.

[3, 1] dan [1, 4]  → [3, 4]
[2, 3] dan [3]     → [2, 3]
[2, 3] dan [2]     → None   // 3 vs 2, tidak ada yang bernilai 1
Broadcasting NumPy
dimensi (dari kanan)ABhasilaturan
axis -48·8dimensi tidak ada → dianggap 1
axis -3177salah satu 1 → direntangkan
axis -2616salah satu 1 → direntangkan
axis -1155salah satu 1 → direntangkan

A + B → shape (8, 7, 6, 5)

Rata kanan, lalu cek tiap dimensi: harus sama, atau salah satunya 1 (atau tidak ada). Dimensi berukuran 1 "direntangkan" tanpa menyalin data.

Kenapa broadcasting penting

Hampir setiap baris kode ML memakai broadcasting: menambahkan bias (d,) ke batch (N, d), mengurangi rata-rata per kolom, membagi dengan norma per baris. Bug yang paling sering muncul adalah broadcasting yang diam-diam berhasil dengan bentuk yang salah, misalnya (N,) + (N, 1) menjadi (N, N).

Aturannya

  1. Sejajarkan kedua bentuk dari kanan.
  2. Tambahkan 1 di kiri bentuk yang lebih pendek.
  3. Untuk tiap posisi: kalau sama, pakai itu; kalau salah satunya 1, pakai yang lain; selain itu error.

Dimensi bernilai 1 “direntangkan” tanpa menyalin data. Itulah kenapa broadcasting cepat dan hemat memori.

Penjelasan

Yang diminta. Kita tidak menghitung angka apa pun, hanya bentuk hasil A + B. Inputnya dua list (misalnya [3, 1] dan [1, 4]), outputnya list bentuk hasil, atau None kalau NumPy akan melempar error.

Kenapa dari kanan. NumPy menyejajarkan bentuk dari dimensi terakhir. (2, 3) dan (3,) cocok karena 3 di ujung kanan bertemu 3. Dimensi yang “tidak ada” di bentuk yang lebih pendek dianggap 1.

Langkah di kode:

  1. for i in range(1, max(len(a), len(b)) + 1) berjalan dari posisi -1 (paling kanan) sampai posisi paling kiri bentuk yang lebih panjang.
  2. x = a[-i] if i <= len(a) else 1 membaca dimensi a di posisi itu, atau 1 jika a sudah habis. Sama untuk y.
  3. Jika x != y dan tidak ada yang bernilai 1, bentuknya tidak kompatibel, jadi return None.
  4. Dimensi hasilnya adalah yang bukan 1: x if y == 1 else y. Ditulis begini (bukan max(x, y)) supaya kasus 0 vs 1 benar: hasilnya 0, bukan 1.
  5. Hasil dikumpulkan dari kanan ke kiri, jadi dibalik dengan out[::-1] sebelum dikembalikan.

Yang dikembalikan: list bilangan bulat (bentuk hasil), atau None.

Kesalahan umum: membandingkan dari kiri; lupa membalik hasil; memakai max sehingga dimensi 0 rusak.

Topik
numpyshapebroadcasting
Petunjuk 1

Bandingkan dimensi dari kanan ke kiri. Kalau salah satu bentuk lebih pendek, anggap dimensi yang hilang bernilai 1.

Petunjuk 2

Dua dimensi cocok jika sama, atau salah satunya 1. Hasilnya adalah dimensi yang bukan 1.

Python 3.14 · NumPy

Pengaturan editor

Ukuran font
Ukuran huruf di editor.
Ukuran tab
Lebar indentasi. Otomatis: 2 spasi untuk TypeScript, 4 untuk Python.
Key bindings
Ganti ke mode Vim.
Nomor baris relatif
Nomor baris dihitung dari posisi kursor (berguna untuk gerakan Vim).
Word wrap
Baris panjang dilipat agar muat di lebar editor.
IntelliSense
Saran kode otomatis saat mengetik (Ctrl+Spasi tetap bisa dipakai saat mati).

Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.