Peraturan Penyiaran
Fahami peraturan penyiaran NumPy supaya anda boleh menambah tatasusunan 1D pada setiap baris tatasusunan 2D tanpa replikasi yang jelas.
Peraturan Penyiaran ialah pelajaran Pandas & NumPy Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pandas & NumPy Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Masalah yang Diselesaikan oleh Penyiaran
Penyiaran membolehkan NumPy menggabungkan tatasusunan dengan bentuk yang berbeza tetapi serasi tanpa menyalin data — tatasusunan yang lebih kecil diregangkan supaya sepadan dengan 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,)Peraturan Penyiaran 1: Tambahkan 1 di Hadapan
NumPy menjajarkan bentuk bermula dari sebelah kanan. Jika satu tatasusunan mempunyai dimensi yang lebih sedikit, NumPy menambah 1 di sebelah kiri — jadi tatasusunan (3,) bertindak seperti (1, 3) apabila bersebelahan dengan tatasusunan (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.]]Peraturan Penyiaran 2: Regangkan Dimensi Bersaiz 1
Mana-mana dimensi dengan saiz 1 boleh diregangkan supaya sepadan dengan tatasusunan yang satu lagi — tiada data yang sebenarnya disalin. Kedua-dua tatasusunan boleh meregangkan dimensi bersaiz 1 masing-masing pada masa yang sama.
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)Peraturan Penyiaran 3: Bentuk Tidak Serasi
Jika dua dimensi tidak sama dan kedua-duanya bukan 1, penyiaran gagal dengan ValueError. Menyemak bentuk terlebih dahulu memberikan ralat yang jelas, bukan pepijat senyap.
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,)Amali: Menolak Purata Lajur
Langkah yang lazim: tolak purata setiap lajur daripada setiap baris untuk memusatkan data anda. Dengan keepdims=True, purata mengekalkan bentuk yang boleh disiarkan dengan betul.
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.]]Amali: Menormalkan Baris
Untuk menjadikan jumlah setiap baris bersamaan 1, bahagikan dengan jumlah baris tersebut. Gunakan keepdims=True supaya jumlah itu mengekalkan bentuk (n, 1) dan boleh disiarkan merentasi lajur.
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 ]]Hasil Darab Luaran melalui Penyiaran
Ubah bentuk satu tatasusunan kepada (n, 1) dan satu lagi kepada (1, m), kemudian darabkan — penyiaran membina matriks hasil darab luaran penuh untuk anda, tanpa memerlukan gelung.
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]]Penyiaran dengan Tatasusunan 3-D
Penyiaran boleh digunakan dengan sebarang bilangan dimensi. Sekumpulan imej berbentuk (100, 28, 28) boleh dipusatkan menggunakan purata setiap piksel berbentuk (1, 28, 28) — NumPy meregangkan dimensi 1 itu.
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 Peregangan Eksplisit
np.broadcast_to menunjukkan dengan tepat hasil penyiaran, sebagai paparan baca sahaja tanpa salinan. Fungsi ini sesuai untuk menggambarkan cara bentuk dijajarkan.
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) # FalseMemvisualkan Bentuk yang Serasi
Peraturan yang berguna: jajarkan bentuk bermula dari sebelah kanan dan semak setiap pasangan. Bentuk itu serasi jika nilainya sama atau salah satunya ialah 1. Ramalkan bentuk sebelum anda menjalankan kod!
# 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)Kesilapan Penyiaran yang Lazim
Perangkap penyiaran yang paling lazim ialah terlupa menggunakan keepdims=True selepas mengagregat, lalu bentuk menjadi tidak sejajar. Apabila buntu, cetak print(arr.shape) untuk melihat perkara yang sebenarnya berlaku.
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) OKSemakan Pantas
Uji pemahaman anda tentang peraturan penyiaran NumPy daripada pelajaran ini.
Imbas Kembali Pelajaran
Anda sudah memahaminya! Penyiaran meregangkan dimensi bersaiz 1, membandingkan bentuk dari sebelah kanan, dan keepdims=True mengekalkan paksi supaya pengiraan sejajar. Seterusnya: penopengan boolean.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Peraturan Penyiaran” percuma?
Ya — teks penuh “Peraturan Penyiaran” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pandas & NumPy Academy, tingkat taraf kepada CoddyKit PRO. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Peraturan Penyiaran”?
Fahami peraturan penyiaran NumPy supaya anda boleh menambah tatasusunan 1D pada setiap baris tatasusunan 2D tanpa replikasi yang jelas. Anda berlatih Pandas & NumPy Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Pandas & NumPy Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Pandas & NumPy Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Peraturan Penyiaran” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Fungsi Universal (ufuncs)
- Fungsi Pengagregatan
- Peraturan Penyiaran
- Penyamaran Boolean dan Pengindeksan Fancy