Kursus
NumPy, sama seperti SciPy, Scikit-Learn, pandas, dan paket serupa lainnya. Mereka adalah paket Python yang tidak boleh Anda lewatkan saat belajar ilmu data, terutama karena pustaka ini menyediakan struktur data array yang memiliki beberapa keunggulan dibanding daftar (list) Python, seperti lebih ringkas, akses baca/tulis item lebih cepat, lebih nyaman, dan lebih efisien.
NumPy ini akan berfokus tepat pada hal tersebut. Ini tidak hanya akan menunjukkan kepada Anda apa sebenarnya array NumPy dan bagaimana Anda dapat memasang Python, tetapi Anda juga akan belajar cara membuat array (bahkan ketika data Anda berasal dari file), bagaimana broadcasting bekerja, cara meminta bantuan, cara memanipulasi array Anda, dan cara memvisualisasikannya.
Jika Anda ingin tahu lebih banyak tentang array NumPy dan struktur data lain yang Anda perlukan dalam perjalanan ilmu data, pertimbangkan untuk melihat Intro to Python for Data Science dari DataCamp, yang memiliki satu bab tentang NumPy.
Apa itu Array Numpy Python?
Anda sudah membaca di pengantar bahwa array NumPy agak mirip dengan list Python, namun pada saat yang sama juga sangat berbeda. Bagi Anda yang baru dengan topik ini, mari perjelas apa sebenarnya ini dan untuk apa ia berguna.
Sesuai namanya, array NumPy adalah struktur data pusat dari pustaka numpy. Nama pustaka ini adalah singkatan dari “Numeric Python” atau “Numerical Python.”
Dengan kata lain, NumPy adalah pustaka Python yang menjadi inti komputasi ilmiah di Python. Ini berisi kumpulan alat dan teknik yang dapat digunakan untuk menyelesaikan model matematis dari masalah sains dan rekayasa.
Salah satu alat tersebut adalah objek array multidimensi berkinerja tinggi yang merupakan struktur data kuat untuk komputasi array dan matriks yang efisien. Untuk bekerja dengan array ini, ada banyak sekali fungsi matematika tingkat tinggi yang beroperasi pada matriks dan array ini.
Tetapi apa itu array?
Saat Anda melihat cetakan beberapa array, Anda bisa melihatnya sebagai kisi yang berisi nilai dengan tipe yang sama:
import numpy as np
# Define a 1D array
my_array = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]],
dtype=np.int64)
# Define a 2D array
my_2d_array = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]],
dtype=np.int64)
# Define a 3D array
my_3d_array = np.array([[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[1, 2, 3, 4],
[9, 10, 11, 12]]],
dtype=np.int64)
# Print the 1D array
print("Printing my_array:")
print(my_array)
# Print the 2D array
print("Printing my_2d_array:")
print(my_2d_array)
# Print the 3D array
print("Printing my_3d_array:")
print(my_3d_array)
Anda melihat bahwa, pada contoh di atas, datanya adalah bilangan bulat. Array menampung dan merepresentasikan data reguler apa pun secara terstruktur.
Namun, perlu Anda ketahui bahwa, pada level struktural, sebuah array pada dasarnya tidak lain hanyalah pointer. Ini adalah kombinasi dari alamat memori, tipe data, bentuk (shape), dan strides:
- Pointer data menunjukkan alamat memori dari byte pertama dalam array.
- Tipe data atau pointer dtype menjelaskan jenis elemen yang terdapat di dalam array.
- Shape menunjukkan bentuk dari array.
- Strides adalah jumlah byte yang harus dilewati di memori untuk menuju elemen berikutnya. Jika strides Anda adalah (10,1), Anda perlu maju satu byte untuk ke kolom berikutnya dan 10 byte untuk menemukan baris berikutnya.
Dengan kata lain, sebuah array berisi informasi tentang data mentah, cara menemukan suatu elemen, dan cara menafsirkan elemen.
Cukup teorinya. Mari kita cek sendiri:
Anda dapat dengan mudah menguji ini dengan mengeksplorasi atribut array numpy:
import numpy as np
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print out memory address
print(my_2d_array.data)
# Print out the shape of `my_array`
print(my_2d_array.shape)
# Print out the data type of `my_array`
print(my_2d_array.dtype)
# Print out the stride of `my_array`
print(my_2d_array.strides)
Anda melihat bahwa sekarang Anda mendapatkan jauh lebih banyak informasi: misalnya, tipe data yang dicetak adalah ‘int64’ atau tipe bilangan bulat bertanda 32-bit; Ini jauh lebih terperinci! Itu juga berarti bahwa array disimpan di memori sebagai 64 byte (karena setiap bilangan bulat memakan 8 byte dan Anda memiliki array berisi 8 bilangan bulat). Strides dari array memberi tahu kita bahwa Anda harus melewati 8 byte (satu nilai) untuk pindah ke kolom berikutnya, tetapi 32 byte (4 nilai) untuk mencapai posisi yang sama di baris berikutnya. Dengan demikian, strides untuk array akan (32,8).
Perhatikan bahwa jika Anda mengatur tipe data ke int32, tupel strides yang Anda dapatkan kembali akan menjadi (16, 4), karena Anda tetap perlu memindahkan satu nilai ke kolom berikutnya dan 4 nilai untuk mencapai posisi yang sama. Satu-satunya hal yang berubah adalah fakta bahwa setiap bilangan bulat akan memakan 4 byte, bukan 8

Array yang Anda lihat di atas, seperti yang sudah disiratkan namanya, adalah array 2 dimensi: Anda memiliki baris dan kolom. Baris ditandai sebagai “sumbu 0”, sementara kolom adalah “sumbu 1”. Nomor sumbu meningkat seiring dengan jumlah dimensi: dalam array 3-D, yang contohnya juga telah Anda lihat pada potongan kode sebelumnya, Anda akan memiliki “sumbu 2” tambahan. Perhatikan bahwa sumbu-sumbu ini hanya valid untuk array yang memiliki minimal 2 dimensi, karena tidak ada gunanya memilikinya untuk array 1-D;
Sumbu-sumbu ini akan berguna nanti saat Anda memanipulasi bentuk array NumPy Anda.
Cara Memasang Numpy
Sebelum Anda mulai mencoba array NumPy sendiri, Anda terlebih dahulu harus memastikan bahwa Anda telah memasangnya secara lokal (dengan asumsi Anda bekerja di PC). Jika pustaka Python sudah tersedia, silakan lewati bagian ini :)
Jika Anda masih perlu menyiapkan lingkungan, Anda harus menyadari bahwa ada dua cara utama memasang NumPy di PC Anda: dengan bantuan Python wheels atau distribusi Python Anaconda.
Pasang Dengan Python Wheels
Pastikan terlebih dahulu bahwa Anda telah memasang Python. Anda dapat melihat panduan kami tentang cara memasang Python jika Anda masih perlu melakukannya :)
Jika Anda bekerja di Windows, pastikan Anda telah menambahkan Python ke variabel lingkungan PATH. Lalu, jangan lupa memasang manajer paket, seperti pip, yang akan memastikan Anda bisa menggunakan pustaka open-source Python.
Perhatikan bahwa versi Python 3 terbaru sudah menyertakan pip, jadi periksa ulang apakah Anda memilikinya, dan jika ya, tingkatkan sebelum Anda memasang NumPy:
pip install pip --upgrade
pip --version
Unduh file wheel NumPy yang sesuai untuk sistem Anda dari situs web PyPI. Anda dapat menemukan daftar wheel NumPy yang tersedia di Python Package Index.pip install numpy-<version>-<architecture>.whl
pip install numpy-1.20.3-cp39-cp39-win_amd64.whl
import numpy
Pasang Dengan Distribusi Python Anaconda
Untuk mendapatkan NumPy, Anda juga bisa mengunduh distribusi Python Anaconda. Ini mudah dan akan memungkinkan Anda memulai dengan cepat! Jika Anda belum mengunduhnya, buka halaman resmi untuk mendapatkannya. Ikuti instruksi pemasangan, dan Anda siap mulai!
Apakah Anda bertanya-tanya mengapa ini mungkin lebih mudah?
Hal baik dari mendapatkan distribusi Python ini adalah Anda tidak perlu terlalu khawatir memasang NumPy secara terpisah atau paket utama mana pun yang akan Anda gunakan untuk analisis data, seperti pandas, scikit-learn, dll.
Karena, terutama jika Anda sangat baru dengan Python, pemrograman, atau terminal, akan sangat melegakan bahwa Anaconda sudah menyertakan 100 paket Python, R, dan Scala paling populer untuk ilmu data. Namun bagi data scientist yang lebih berpengalaman, Anaconda tetap menjadi pilihan jika Anda ingin segera mulai mengatasi masalah ilmu data.
Selain itu, Anaconda juga menyertakan beberapa lingkungan pengembangan open-source, seperti Jupyter dan Spyder. Jika Anda ingin mulai bekerja dengan Jupyter Notebook setelah tutorial ini, kunjungi tutorial Jupyter notebook kami.
Singkatnya, pertimbangkan untuk mengunduh Anaconda agar dapat mulai bekerja dengan numpy dan paket lain yang relevan untuk ilmu data!
Cara Membuat Array NumPy
Jadi, sekarang setelah Anda menyiapkan lingkungan, saatnya pekerjaan sebenarnya. Memang, Anda sudah mencoba beberapa hal dengan array pada kode di atas. Namun, Anda belum benar-benar mendapatkan latihan langsung karena Anda terlebih dahulu perlu memasang NumPy di PC Anda sendiri. Sekarang setelah Anda melakukannya, saatnya melihat apa yang perlu Anda lakukan untuk menjalankan potongan kode di atas sendiri.
Untuk membuat array numpy, Anda bisa menggunakan fungsi np.array(). Yang perlu Anda lakukan hanyalah meneruskan sebuah list, dan opsional, Anda juga bisa menentukan tipe data dari datanya. Jika Anda ingin tahu lebih banyak tentang tipe data yang bisa dipilih, buka panduan ini atau pertimbangkan untuk melihat sekilas lembar contekan NumPy dari DataCamp.
Tidak perlu menghafal tipe data NumPy ini jika Anda pengguna baru, tetapi Anda harus tahu dan peduli data apa yang Anda tangani. Tipe data ada saat Anda memerlukan lebih banyak kontrol atas bagaimana data Anda disimpan di memori dan di disk. Terutama dalam kasus saat Anda bekerja dengan data yang besar, ada baiknya Anda tahu cara mengendalikan tipe penyimpanan.
Jangan lupa bahwa, untuk bekerja dengan fungsi np.array(), Anda perlu memastikan pustaka numpy hadir di lingkungan Anda.
Pustaka NumPy mengikuti konvensi impor: ketika Anda mengimpornya, pastikan Anda mengimpornya sebagai np. Dengan melakukan ini, Anda akan memastikan Pythonista lain lebih mudah memahami kode Anda.
Pada contoh berikut, Anda akan membuat array my_array yang sudah Anda mainkan di atas:
import numpy as np
# Make the array `my_array`
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print `my_array`
print(my_array)
Jika Anda ingin tahu lebih banyak tentang cara membuat list, lihat tutorial pertanyaan list Python kami.
Namun, terkadang Anda tidak tahu data apa yang ingin dimasukkan ke array, atau Anda ingin mengimpor data ke array numpy dari sumber lain. Dalam kasus tersebut, Anda akan menggunakan placeholder awal atau fungsi untuk memuat data dari teks ke dalam array.
Bagian-bagian berikut akan menunjukkan cara melakukannya.
Cara membuat array NumPy “Kosong”
Yang sering dimaksud orang ketika mereka mengatakan bahwa mereka membuat array “kosong” adalah mereka ingin menggunakan placeholder awal, yang bisa Anda isi belakangan. Anda dapat menginisialisasi array dengan angka satu atau nol, tetapi Anda juga dapat membuat array yang diisi dengan nilai berjarak sama, nilai konstan, atau nilai acak.
Namun, Anda juga tetap bisa membuat array yang benar-benar kosong.
Untungnya bagi kita, ada cukup banyak fungsi untuk membuatnya.
Cobalah semuanya di bawah ini!
import numpy as np
# Create an array of ones
ones_array = np.ones((3, 4))
print("Ones Array:")
print(ones_array)
print()
# Create an array of zeros
zeros_array = np.zeros((2, 3, 4), dtype=np.int16)
print("Zeros Array:")
print(zeros_array)
print()
# Create an array with random values
random_array = np.random.random((2, 2))
print("Random Array:")
print(random_array)
print()
# Create an empty array
empty_array = np.empty((3, 2))
print("Empty Array:")
print(empty_array)
print()
# Create a full array
full_array = np.full((2, 2), 7)
print("Full Array:")
print(full_array)
print()
# Create an array of evenly-spaced values
arange_array = np.arange(10, 25, 5)
print("Arange Array:")
print(arange_array)
print()
# Create an array of evenly-spaced values
np.linspace(0,2,9)
Tip: coba-coba fungsi di atas agar Anda memahami cara kerjanya!
- Untuk beberapa fungsi, seperti np.ones(), np.random.random(), np.empty(), np.full() atau np.zeros() satu-satunya hal yang perlu Anda lakukan untuk membuat array berisi satu atau nol adalah meneruskan shape dari array yang ingin dibuat. Sebagai opsi untuk np.ones() dan np.zeros(), Anda juga dapat menentukan tipe data. Pada kasus np.full(), Anda juga harus menentukan nilai konstan yang ingin dimasukkan ke array.
- Dengan np.linspace() dan np.arange() Anda dapat membuat array berisi nilai yang berjarak sama. Perbedaan antara kedua fungsi ini adalah nilai terakhir dari tiga nilai yang diteruskan pada potongan kode di atas menunjuk ke nilai langkah untuk np.linspace() atau jumlah sampel untuk np.arange(). Yang terjadi pada yang pertama adalah Anda ingin, misalnya, array berisi 9 nilai yang berada di antara 0 dan 2. Untuk yang kedua, Anda menentukan bahwa Anda ingin array dimulai pada 10 dan per langkah 5, menghasilkan nilai untuk array yang Anda buat.
Ingat bahwa NumPy juga memungkinkan Anda membuat array atau matriks identitas dengan np.eye() dan np.identity(). Matriks identitas adalah matriks persegi di mana semua elemen pada diagonal utama bernilai satu, dan semua elemen lainnya bernilai nol. Saat Anda mengalikan matriks dengan matriks identitas, matriks yang diberikan tetap tidak berubah.
Dengan kata lain, jika Anda mengalikan sebuah matriks dengan matriks identitas, hasilnya akan menjadi matriks yang sama lagi berdasarkan konvensi standar perkalian matriks.
Walaupun fokus tutorial ini bukan untuk mendemonstrasikan cara kerja matriks identitas, cukup dikatakan bahwa matriks identitas berguna saat Anda mulai melakukan perhitungan matriks: matriks ini dapat menyederhanakan persamaan matematika, yang membuat komputasi Anda lebih efisien dan andal.
Cara Memuat Array NumPy Dari Teks
Membuat array dengan bantuan placeholder awal atau dengan beberapa data contoh adalah cara yang bagus untuk memulai dengan numpy. Tetapi ketika Anda ingin mulai dengan analisis data, Anda perlu memuat data dari file teks.
Dengan apa yang telah Anda lihat sejauh ini, Anda tidak akan benar-benar bisa melakukan banyak hal. Gunakan beberapa fungsi spesifik untuk memuat data dari file Anda, seperti loadtxt() atau genfromtxt().
Misalkan Anda memiliki file teks berikut dengan data, Anda ingin menyalin-nempel nilai yang dikomentari pada kode di bawah, menempelkannya ke file teks, dan menyimpannya sebagai “data.txt.” Anda kemudian dapat menggunakan kode di bawah ini:
# This is your data in the text file
# Value1 Value2 Value3
# 0.2536 0.1008 0.3857
# 0.4839 0.4536 0.3561
# 0.1292 0.6875 0.5929
# 0.1781 0.3049 0.8928
# 0.6253 0.3486 0.8791
# Import your data
x, y, z = np.loadtxt('data.txt',
skiprows=1,
unpack=True)
Pada kode di atas, Anda menggunakan loadtxt() untuk memuat data ke lingkungan Anda. Anda melihat bahwa argumen pertama yang diambil kedua fungsi adalah file teks data.txt. Selanjutnya, ada beberapa argumen spesifik untuk masing-masing: pada pernyataan pertama, Anda melewati baris pertama, dan Anda mengembalikan kolom sebagai array terpisah dengan unpack=TRUE. Ini berarti bahwa nilai pada kolom Value1 akan dimasukkan ke x, dan seterusnya.
Perhatikan bahwa, jika Anda memiliki data yang dipisahkan koma atau jika Anda ingin menentukan tipe data, ada juga argumen delimiter dan dtype yang dapat Anda tambahkan ke argumen loadtxt().
Itu mudah dan lugas, bukan?
Mari lihat file kedua Anda dengan data:
# Your data in the text file
# Value1 Value2 Value3
# 0.4839 0.4536 0.3561
# 0.1292 0.6875 MISSING
# 0.1781 0.3049 0.8928
# MISSING 0.5801 0.2038
# 0.5993 0.4357 0.7410
my_array2 = np.genfromtxt('data2.txt',
skip_header=1,
filling_values=-999)
Anda melihat bahwa di sini, Anda menggunakan genfromtxt() untuk memuat data. Dalam kasus ini, Anda harus menangani beberapa nilai hilang yang ditandai oleh string 'MISSING'.
Karena fungsi genfromtxt() mengonversi string karakter di kolom numerik menjadi nan, Anda dapat mengonversi nilai-nilai ini ke nilai lain dengan menentukan argumen filling_values. Dalam kasus ini, Anda memilih menetapkan nilai -999 untuk nilai yang hilang tersebut.
Jika, kebetulan, Anda memiliki nilai yang tidak dikonversi menjadi nan oleh genfromtxt(), selalu ada argumen missing_values yang memungkinkan Anda menentukan apa sebenarnya nilai hilang dari data Anda.
Tapi itu belum semuanya.
Tip: lihat halaman numpy.genfromtxt ini untuk melihat argumen lain apa yang dapat Anda tambahkan agar berhasil mengimpor data.
Sekarang Anda mungkin bertanya-tanya apa perbedaan nyata antara kedua fungsi ini.
Contoh-contoh tadi mungkin mengindikasikannya secara implisit, tetapi, secara umum, genfromtxt() memberi Anda sedikit lebih banyak fleksibilitas; Ini lebih tangguh daripada loadtxt().
Mari buat perbedaan ini sedikit lebih praktis: yang terakhir, loadtxt(), hanya berfungsi ketika setiap baris dalam file teks memiliki jumlah nilai yang sama, jadi ketika Anda ingin menangani nilai hilang dengan mudah, Anda biasanya akan merasa lebih mudah menggunakan genfromtxt().
Tapi ini jelas bukan satu-satunya alasan.
Sekilas pada jumlah argumen yang ditawarkan genfromtxt() akan mengajarkan Anda bahwa ada jauh lebih banyak hal yang dapat Anda tentukan dalam impor Anda, seperti jumlah maksimum baris yang dibaca atau opsi untuk secara otomatis menghapus spasi putih dari variabel.
Cara Menyimpan Array NumPy
Setelah Anda melakukan semua yang perlu dilakukan dengan array Anda, Anda juga dapat menyimpannya ke file. Jika Anda ingin menyimpan array ke file teks, Anda dapat menggunakan fungsi savetxt() untuk melakukannya:
import numpy as np
x = np.arange(0.0,5.0,1.0)
np.savetxt('test.out', x, delimiter=',')
Ingat bahwa np.arange() membuat array NumPy berisi nilai yang berjarak sama. Nilai ketiga yang Anda teruskan ke fungsi ini adalah nilai langkah.
Tentu saja, ada cara lain untuk menyimpan array NumPy Anda ke file teks. Lihat fungsi pada tabel di bawah jika Anda ingin menyimpan data Anda ke file biner atau arsip:
| save() | Simpan array ke file biner dalam format NumPy .npy |
| savez() | Simpan beberapa array ke arsip .npz tidak terkompresi |
| savez_compressed() | Simpan beberapa array ke arsip .npz terkompresi |
Untuk informasi lebih lanjut atau contoh cara menggunakan fungsi di atas untuk menyimpan data Anda, periksa halaman referensi NumPy atau gunakan salah satu fungsi bantuan yang ditawarkan NumPy agar langsung mengetahui lebih banyak!
Apakah Anda tidak yakin apa fungsi bantuan NumPy itu?
Jangan khawatir! Anda akan mempelajari lebih lanjut tentangnya di salah satu bagian selanjutnya!
Cara Menginspeksi Array NumPy Anda
Selain atribut array yang telah disebutkan di atas, yaitu data, shape, dtype dan strides, ada beberapa lagi yang dapat Anda gunakan untuk dengan mudah mengetahui lebih banyak tentang array Anda. Yang mungkin menarik untuk digunakan saat Anda baru memulai adalah sebagai berikut:
import numpy as np
# Create a numpy array with shape (2,4) and dtype int64
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print the number of dimensions of `my_array`
print("Number of dimensions of my_array:")
print(my_array.ndim)
print()
# Print the number of elements in `my_array`
print("Number of elements in my_array:")
print(my_array.size)
print()
# Print information about the memory layout of `my_array`
print("Information about the memory layout of my_array:")
print(my_array.flags)
print()
# Print the length of one array element in bytes
print("Length of one array element in bytes:")
print(my_array.itemsize)
print()
# Print the total consumed bytes by `my_array`'s elements
print("Total consumed bytes by my_array's elements:")
print(my_array.nbytes)
print()
Ini hampir semua atribut yang dapat dimiliki sebuah array.
Jangan khawatir jika Anda merasa tidak semuanya berguna bagi Anda saat ini. Ini cukup normal karena, seperti yang Anda baca di bagian sebelumnya, Anda baru akan mulai memikirkan memori ketika Anda bekerja dengan set data besar.
Perhatikan juga bahwa, selain atribut, Anda juga memiliki beberapa cara lain untuk mendapatkan lebih banyak informasi bahkan sedikit mengutak-atik array Anda:
import numpy as np
my_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print the length of `my_array`
print(len(my_array))
# Change the data type of `my_array`
my_array.astype(float)
Sekarang setelah Anda membuat array, baik dengan membuatnya sendiri dengan np.array() atau salah satu fungsi placeholder awal, atau dengan memuat data Anda melalui fungsi loadtxt() atau genfromtxt(), saatnya melihat lebih dekat ke elemen kunci kedua yang benar-benar mendefinisikan pustaka NumPy: komputasi ilmiah.
Cara Kerja Broadcasting di NumPy
Sebelum Anda masuk lebih dalam ke komputasi ilmiah, ada baiknya terlebih dahulu membahas apa sebenarnya broadcasting itu: ini adalah mekanisme yang memungkinkan NumPy bekerja dengan array yang memiliki bentuk berbeda saat Anda melakukan operasi aritmetika.
Infografik di bawah menunjukkan contoh broadcasting NumPy yang sedang berjalan:

Dalam konteks yang lebih praktis, Anda sering kali memiliki sebuah array yang agak lebih besar dan satu lagi yang sedikit lebih kecil. Idealnya, Anda ingin menggunakan array yang lebih kecil berkali-kali untuk melakukan operasi (seperti penjumlahan, perkalian, dll.) pada array yang lebih besar.
Untuk melakukan ini, Anda menggunakan mekanisme broadcasting.
Namun, ada beberapa aturan jika Anda ingin menggunakannya. Dan, sebelum Anda menghela napas, Anda akan melihat bahwa “aturan” ini sangat sederhana dan cukup mudah dipahami!
- Pertama, untuk memastikan broadcasting berhasil, dimensi array Anda harus kompatibel. Dua dimensi kompatibel ketika keduanya sama. Pertimbangkan contoh berikut:
# Import the NumPy library and give it an alias of `np`
import numpy as np
# Initialize a 3x4 array of ones and assign it to the variable `x`
x = np.ones((3,4))
# Print the shape of the array `x`
print("Shape of x:", x.shape)
# Initialize a 3x4 array of random numbers between 0 and 1 and assign it to the variable `y`
y = np.random.random((3,4))
# Print the shape of the array `y`
print("Shape of y:", y.shape)
# Add the arrays `x` and `y` element-wise and print the resulting array
z = x + y
print("Result of x + y:\n", z)
# Print the shape of the resulting array
print("Shape of x + y:", z.shape)
- Dua dimensi juga kompatibel ketika salah satunya adalah 1:
# Import the NumPy library and give it an alias of `np`
import numpy as np
# Initialize a 3x4 array of ones and assign it to the variable `x`
x = np.ones((3,4))
# Print the shape of the array `x`
print("Shape of x:", x.shape)
# Initialize a 3x4 array of random numbers between 0 and 1 and assign it to the variable `y`
y = np.random.random((3,4))
# Print the shape of the array `y`
print("Shape of y:", y.shape)
# Add the arrays `x` and `y` element-wise and print the resulting array
z = x + y
print("Result of x + y:\n", z)
# Print the shape of the resulting array
print("Shape of x + y:", z.shape)
Perhatikan bahwa jika dimensinya tidak kompatibel, Anda akan mendapatkan ValueError.
Tip: uji juga ukuran array hasil setelah Anda melakukan komputasi! Anda akan melihat bahwa ukurannya sebenarnya adalah ukuran maksimum di sepanjang setiap dimensi dari array masukan.
Dengan kata lain, Anda melihat bahwa hasil dari x-y memberikan array dengan shape (3,4): y memiliki shape (4,) dan x memiliki shape (3,4). Ukuran maksimum di sepanjang setiap dimensi x dan y diambil untuk membentuk shape dari array baru yang dihasilkan.
- Terakhir, array hanya dapat dibroadcast bersama jika kompatibel di semua dimensi. Pertimbangkan contoh berikut:
# Import `numpy` as `np`
import numpy as np
# Initialize `x` and `y`
x = np.ones((3,4))
y = np.random.random((5,1,4))
# Add `x` and `y`
z = x + y
Anda melihat bahwa, meskipun x dan y tampak memiliki dimensi yang agak berbeda, keduanya dapat dijumlahkan.
Itu karena mereka kompatibel di semua dimensi:
- Array x memiliki dimensi 3 X 4,
- Array y memiliki dimensi 5 X 1 X 4
Karena Anda telah melihat di atas bahwa dimensi juga kompatibel jika salah satunya sama dengan 1, Anda melihat bahwa kedua array ini memang kandidat yang baik untuk broadcasting!
Yang akan Anda perhatikan adalah bahwa pada dimensi di mana y berukuran 1, dan array lainnya berukuran lebih besar dari 1 (yaitu 3), array pertama berperilaku seolah-olah disalin di sepanjang dimensi tersebut.
Perhatikan bahwa shape dari array hasil lagi-lagi akan menjadi ukuran maksimum di sepanjang setiap dimensi x dan y: dimensi hasilnya akan (5,3,4)
Singkatnya, jika Anda ingin memanfaatkan broadcasting, Anda akan sangat bergantung pada shape dan dimensi array yang Anda gunakan.
Tetapi bagaimana jika dimensinya tidak kompatibel?
Bagaimana jika mereka tidak sama atau jika salah satunya tidak sama dengan 1?
Anda harus memperbaikinya dengan memanipulasi array Anda! Anda akan melihat cara melakukannya di salah satu bagian berikutnya.
Bagaimana Matematika Array Bekerja?
Anda telah melihat bahwa broadcasting berguna saat Anda melakukan operasi aritmetika. Di bagian ini, Anda akan menemukan beberapa fungsi yang dapat Anda gunakan untuk melakukan matematika dengan array.
Karena itu, mungkin tidak mengejutkan Anda bahwa Anda dapat menggunakan +, -, *, / atau % untuk menjumlahkan, mengurangkan, mengalikan, membagi, atau menghitung sisa dari dua (atau lebih) array. Namun, sebagian besar alasan mengapa NumPy begitu praktis adalah karena ia juga memiliki fungsi untuk melakukan ini. Fungsi yang setara dengan operasi yang baru saja Anda lihat adalah, masing-masing, np.add(), np.subtract(), np.multiply(), np.divide() dan np.remainder().
Anda juga dapat dengan mudah melakukan eksponensial dan mengambil akar kuadrat dari array Anda dengan np.exp() dan np.sqrt(), atau menghitung sinus atau cosinus dari array Anda dengan np.sin() dan np.cos(). Terakhir, ada juga cara untuk menghitung logaritma natural dengan np.log() atau menghitung perkalian dot dengan menerapkan dot() pada array Anda.
Cobalah semuanya pada kode di bawah.
Hanya tip: pastikan untuk memeriksa terlebih dahulu array yang telah dimuat untuk latihan ini!
# Import `numpy` as `np`
import numpy as np
x = np.array([[1, 2, 3], [3, 4, 5]])
y = np.array([6,7,8])
# Add `x` and `y`
z = np.add(x,y)
print("Addition of x and y:\n", z)
# Subtract `x` and `y`
z = np.subtract(x,y)
print("Subtraction of y from x:\n", z)
# Multiply `x` and `y`
z = np.multiply(x,y)
print("Element-wise multiplication of x and y:\n", z)
Ingat bagaimana broadcasting bekerja? Periksa dimensi dan shape dari x dan y di shell IPython Anda. Apakah aturan broadcasting dihormati?
Tetapi masih ada lagi.
Lihat daftar kecil fungsi agregat ini:
| a.sum() | Jumlah seluruh array |
| a.min() | Nilai minimum seluruh array |
| b.max(axis=0) | Nilai maksimum dari baris array |
| b.cumsum(axis=1) | Jumlah kumulatif dari elemen |
| a.mean() | Rata-rata |
| b.median() | Median |
| a.corrcoef() | Koefisien korelasi |
| np.std(b) | Simpangan baku |
Selain semua fungsi ini, Anda mungkin juga merasa berguna mengetahui bahwa ada mekanisme yang memungkinkan Anda membandingkan elemen array. Misalnya, jika Anda ingin memeriksa apakah elemen dua array sama, Anda dapat menggunakan operator ==. Untuk memeriksa apakah elemen array lebih kecil atau lebih besar, Anda menggunakan operator < atau >.
Semua ini tampak cukup lugas, ya?
Namun, Anda juga dapat membandingkan seluruh array satu sama lain! Dalam kasus ini, Anda menggunakan fungsi np.array_equal(). Cukup teruskan dua array yang ingin Anda bandingkan, dan selesai.
Perhatikan bahwa, selain membandingkan, Anda juga dapat melakukan operasi logika pada array Anda. Anda dapat mulai dengan np.logical_or(), np.logical_not() dan np.logical_and(). Ini pada dasarnya bekerja seperti operasi logika OR, NOT, dan AND yang khas;
Pada contoh paling sederhana, Anda menggunakan OR untuk melihat apakah elemen Anda sama (misalnya, 1), atau jika salah satu dari dua elemen array adalah 1. Jika keduanya 0, Anda akan mengembalikan FALSE. Anda akan menggunakan AND untuk melihat apakah elemen kedua juga 1 dan NOT untuk melihat apakah elemen kedua berbeda dari 1.
Uji ini pada potongan kode di bawah:
# Import `numpy` as `np`
import numpy as np
# Initialize arrays
a = np.array([1, 1, 0, 0], dtype=bool)
b = np.array([1, 0, 1, 0], dtype=bool)
# `a` AND `b`
np.logical_and(a, b)
# `a` OR `b`
np.logical_or(a, b)
# `a` NOT `b`
np.logical_not(a,b)
Cara Subset, Slice, dan Index Array
Selain operasi matematika, Anda mungkin juga ingin mengambil hanya sebagian dari array asli (atau array hasil) atau hanya beberapa elemen array untuk digunakan dalam analisis lebih lanjut atau operasi lainnya. Dalam kasus seperti itu, Anda perlu melakukan subset, slice, dan/atau indexing pada array Anda.
Operasi ini sangat mirip saat Anda melakukannya pada list Python. Jika Anda ingin memeriksa sendiri kemiripannya, atau jika Anda menginginkan penjelasan yang lebih luas, Anda dapat melihat tutorial list Python dari DataCamp.
Jika Anda sama sekali tidak tahu bagaimana operasi ini bekerja, untuk saat ini cukup mengetahui dua hal dasar ini:
- Anda menggunakan tanda kurung siku [] sebagai operator indeks, dan
- Umumnya, Anda meneruskan bilangan bulat ke tanda kurung siku ini, tetapi Anda juga dapat menaruh titik dua : atau kombinasi titik dua dengan bilangan bulat di dalamnya untuk menunjuk elemen/baris/kolom yang ingin Anda pilih.
Subsetting
Selain dua poin tersebut, cara termudah untuk melihat bagaimana semuanya menyatu adalah dengan melihat beberapa contoh subsetting:
import numpy as np
# Initialize 1D array
my_array = np.array([1,2,3,4])
# Print subsets
print(my_array[1])
import numpy as np
# Initialize 2D array
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print subsets
print(my_2d_array[1][2])
print(my_2d_array[1,2])
import numpy as np
# Initialize 3D array
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)
# Print subset
print(my_3d_array[1,1,2])
Slicing
Sedikit lebih maju daripada subsetting, jika boleh dibilang, adalah slicing. Di sini, Anda mempertimbangkan bukan hanya nilai tertentu dari array Anda, tetapi Anda masuk ke level baris dan kolom. Anda pada dasarnya bekerja dengan “wilayah” data alih-alih “lokasi” murni.
Anda dapat melihat apa yang dimaksud dengan analogi ini pada contoh kode berikut:
import numpy as np
# Initialize 1D array
my_array = np.array([1,2,3,4])
# Print subsets
print(my_array[0:2])
import numpy as np
# Initialize 2D array
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print subsets
print(my_2d_array[0:2,1])
import numpy as np
# Initialize 3D array
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)
# Print subset
print(my_3d_array[1,...])
Anda akan melihat bahwa, pada intinya, hal berikut berlaku:
a[start:end] # items start through the end (but the end is not included!)
a[start:] # items start through the rest of the array
a[:end] # items from the beginning through the end (but the end is not included!)
Pada kode di atas, setiap array diinisialisasi secara terpisah, dan subset dicetak pada blok kode terpisah. my_array, my_2d_array, dan my_3d_array adalah array 1D, 2D, dan 3D masing-masing, dan subset dicetak menggunakan notasi pengindeksan.
Pada contoh pertama, kita menggunakan slicing untuk memilih item pada indeks 0 dan 1 dari my_array. Pada contoh kedua, kita menggunakan slicing untuk memilih item pada baris 0 dan 1, kolom 1 dari my_2d_array. Pada contoh ketiga, kita menggunakan notasi ... untuk memilih semua elemen di sepanjang dimensi pertama dan kedua, dan elemen kedua di sepanjang dimensi ketiga dari my_3d_array.
Indexing
Terakhir, ada juga indexing. Dalam konteks NumPy, ada boolean indexing dan advanced atau “fancy” indexing.
(Kalau Anda penasaran, ini memang jargon resmi NumPy, bukan saya yang mengada-ada!)
Pertama adalah boolean indexing. Di sini, alih-alih memilih elemen, baris atau kolom berdasarkan nomor indeks, Anda memilih nilai dari array yang memenuhi kondisi tertentu.
Mewujudkan ini ke dalam kode bisa cukup mudah:
import numpy as np
my_array = np.array([1,2,3,4])
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)
# Try out a simple example
print(my_array[my_array<2])
# Specify a condition
bigger_than_3 = (my_3d_array >= 3)
# Use the condition to index our 3d array
print(my_3d_array[bigger_than_3])
Perhatikan bahwa untuk menentukan kondisi, Anda juga dapat menggunakan operator logika | (OR) dan & (AND). Jika Anda ingin menulis ulang kondisi di atas dengan cara seperti itu (yang akan tidak efisien, tetapi saya demokan di sini untuk tujuan edukasi :)), Anda akan mendapatkan bigger_than_3 = (my_3d_array > 3) | (my_3d_array == 3).
Dengan array yang telah dimuat, tidak terlalu banyak kemungkinan, tetapi dengan array yang berisi, misalnya, nama atau ibu kota, kemungkinannya bisa tak terbatas!
Ketika berbicara tentang fancy indexing, yang pada dasarnya Anda lakukan adalah: Anda meneruskan daftar atau array bilangan bulat untuk menentukan urutan subset baris yang ingin Anda pilih dari array asli.
Apakah ini terdengar agak abstrak bagi Anda?
Jangan khawatir, cukup coba pada potongan kode di bawah:
import numpy as np
my_array = np.array([1,2,3,4])
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)
# Select elements at (1,0), (0,1), (1,2) and (0,0)
print(my_2d_array[[1, 0, 1, 0],[0, 1, 2, 0]])
# Select a subset of the rows and columns
print(my_2d_array[[1, 0, 1, 0]][:,[0,1,2,0]])
Sekarang, pernyataan kedua mungkin tampak kurang masuk akal bagi Anda pada pandangan pertama. Ini normal. Ini mungkin lebih masuk akal jika Anda mengurainya:
- Jika Anda hanya mengeksekusi my_2d_array[[1,0,1,0]], hasilnya adalah sebagai berikut:
array([[5, 6, 7, 8],
[1, 2, 3, 4],
[5, 6, 7, 8],
[1, 2, 3, 4]])
- Bagian kedua, yaitu [:,[0,1,2,0]], memberi tahu Anda bahwa Anda ingin mempertahankan semua baris dari hasil ini, tetapi Anda ingin mengubah urutan kolom sedikit. Anda ingin menampilkan kolom 0, 1, dan 2 sebagaimana adanya sekarang, tetapi Anda ingin mengulangi kolom 0 sebagai kolom terakhir alih-alih menampilkan kolom nomor 3. Ini akan memberi Anda hasil berikut:
array([[5, 6, 7, 5],
[1, 2, 3, 1],
[5, 6, 7, 5],
[1, 2, 3, 1]])
Advanced indexing jelas tidak lagi menjadi rahasia bagi Anda!
Cara Meminta Bantuan
Sebagai selingan singkat, Anda harus tahu bahwa Anda selalu dapat meminta lebih banyak informasi tentang modul, fungsi, atau kelas yang sedang Anda gunakan, terutama karena NumPy bisa jadi cukup menantang ketika Anda baru mulai bekerja dengannya.
Meminta bantuan cukup mudah.
Anda cukup menggunakan fungsi bantuan khusus yang ditawarkan numpy untuk memandu Anda:
- Gunakan lookfor() untuk melakukan pencarian kata kunci pada docstring. Ini sangat berguna jika Anda baru memulai, karena ‘teori’ di balik semuanya mungkin memudar dalam ingatan Anda. Satu kelemahannya adalah Anda harus melalui semua hasil pencarian jika kueri Anda tidak terlalu spesifik, seperti pada contoh kode di bawah. Ini dapat membuatnya bahkan kurang ringkas bagi Anda.
- Gunakan info() untuk penjelasan cepat dan contoh kode dari fungsi, kelas, atau modul. Jika Anda tipe pembelajar praktik, ini adalah caranya! Satu-satunya kekurangan menggunakan fungsi ini mungkin Anda harus tahu modul tempat atribut atau fungsi tertentu berada. Jika Anda tidak langsung tahu maksudnya, lihat contoh kode di bawah.
Anda lihat, kedua fungsi memiliki kelebihan dan kekurangannya, tetapi Anda akan melihat sendiri mengapa keduanya bisa berguna: coba sendiri pada potongan kode di bawah!
import numpy as np
# Look up info on `mean` with `np.lookfor()`
print(np.lookfor("mean"))
# Get info on data types with `np.info()`
np.info(np.ndarray.dtype)
Perhatikan bahwa Anda memang perlu tahu bahwa dtype adalah atribut dari ndarray. Juga, pastikan Anda tidak lupa menaruh np di depan modul, kelas, atau istilah yang Anda mintai informasinya, jika tidak Anda akan mendapatkan pesan kesalahan seperti ini:
Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'ndarray' is not defined
Sekarang Anda tahu cara meminta bantuan, dan itu hal yang baik. Topik berikut yang dibahas tutorial NumPy ini adalah manipulasi array.
Bukan berarti Anda tidak bisa mengatasi topik ini sendiri, justru sebaliknya!
Tetapi beberapa fungsi mungkin menimbulkan pertanyaan, karena, apa perbedaan antara mengubah ukuran (resizing) dan mengubah bentuk (reshaping)?
Dan apa perbedaan antara menumpuk (stacking) array Anda secara horizontal dan vertikal?
Bagian berikut adalah tentang menjawab pertanyaan-pertanyaan ini, tetapi jika Anda ragu, silakan gunakan fungsi bantuan yang baru saja Anda lihat untuk cepat mengejar ketertinggalan.
Cara Memanipulasi Array
Melakukan operasi matematika pada array Anda adalah salah satu hal yang akan Anda lakukan, tetapi mungkin yang paling penting agar ini dan broadcasting berfungsi adalah mengetahui cara memanipulasi array Anda.
Di bawah ini adalah beberapa manipulasi paling umum yang akan Anda lakukan.
Cara Transpose Array Anda
Yang dilakukan transpose pada array Anda sebenarnya adalah menukar dimensi-dimensinya. Atau, dengan kata lain, Anda menukar bentuk array. Mari ambil contoh kecil untuk menunjukkan efek transposisi:
import numpy as np
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print `my_2d_array`
print(my_2d_array)
# Transpose `my_2d_array`
print(np.transpose(my_2d_array))
# Or use `T` to transpose `my_2d_array`
print(my_2d_array.T)
Tip: jika perbandingan visual antara array dan versi transposenya belum sepenuhnya jelas, inspeksi shape dari kedua array untuk memastikan Anda memahami mengapa dimensinya ditukar.
Perhatikan bahwa ada dua fungsi transpose. Keduanya melakukan hal yang sama; Tidak terlalu banyak perbedaan. Anda hanya perlu mempertimbangkan bahwa T tampak lebih seperti fungsi kemudahan dan Anda memiliki fleksibilitas lebih dengan np.transpose(). Itulah mengapa disarankan menggunakan fungsi ini jika Anda ingin lebih banyak argumen.
Semuanya baik-baik saja saat Anda mentranspose array yang lebih besar dari satu dimensi, tetapi apa yang terjadi saat Anda hanya memiliki array 1-D? Menurut Anda, apakah akan ada efek?
Coba sendiri pada potongan kode di bawah. Array 1-D Anda telah dimuat:
import numpy as np
my_array = np.array([1,2,3,4])
# Print `my_2d_array
print(my_array)
# Transpose `my_2d_array
print(np.transpose(my_array))
# Or use `T` to transpose `my_2d_array
print(my_array.T)
Anda benar sekali! Tidak ada efek saat Anda mentranspose array 1-D!
Mengubah Bentuk vs Mengubah Ukuran Array Anda
Anda mungkin telah membaca pada bagian broadcasting bahwa dimensi array Anda harus kompatibel jika Anda ingin menjadi kandidat yang baik untuk operasi aritmetika. Namun pertanyaan tentang apa yang harus Anda lakukan ketika itu tidak terjadi, belum terjawab.
Nah, di sinilah Anda mendapatkan jawabannya!
Yang bisa Anda lakukan jika array tidak memiliki dimensi yang sama adalah mengubah ukuran array. Anda kemudian akan mengembalikan array baru yang memiliki shape yang Anda berikan ke fungsi np.resize(). Jika Anda meneruskan array asli bersama dimensi baru, dan jika array baru itu lebih besar daripada yang Anda miliki semula, array baru akan diisi dengan salinan array asli yang diulang sebanyak yang diperlukan.
Namun, jika Anda hanya menerapkan np.resize() pada array dan Anda meneruskan shape baru, array baru akan diisi dengan nol.
Mari coba ini dengan contoh:
import numpy as np
x = np.ones((3,4))
# Print the shape of `x`
print(x.shape)
# Resize `x` to ((6,4))
np.resize(x, (6,4))
# Try out this as well
x.resize((6,4))
# Print out `x`
print(x)
Selain mengubah ukuran, Anda juga dapat mengubah bentuk array. Ini berarti Anda memberikan bentuk baru ke array tanpa mengubah datanya. Kunci untuk reshaping adalah memastikan ukuran total array baru tidak berubah. Jika Anda mengambil contoh array x yang digunakan di atas, yang berukuran 3 X 4 atau 12, Anda harus memastikan bahwa array baru juga berukuran 12.
Psst… Jika Anda ingin menghitung ukuran array dengan kode, pastikan menggunakan atribut size: x.size atau x.reshape((2,6)).size:
import numpy as np
# Initialize array with shape (3,4) containing all ones
x = np.ones((3,4))
# Print the shape of `x`
print("Shape of x:", x.shape)
# Resize `x` to ((6,4))
np.resize(x, (6,4))
# Try out this as well
x.resize((6,4))
# Print out `x` before and after resizing
print("Array before transposing:\n", x)
print("Shape of array before transposing:", x.shape)
# Transpose `x`
x = x.T
# Print out `x` after transposing
print("Array after transposing:\n", x)
print("Shape of array after transposing:", x.shape)
Keluaran:
Shape of x: (3, 4)
Array before transposing:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
Shape of array before transposing: (6, 4)
Array after transposing:
[[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]]
Shape of array after transposing: (4, 6)
Jika semua cara gagal, Anda juga dapat menambahkan (append) sebuah array ke array asli Anda atau menyisipkan (insert) atau menghapus (delete) elemen array untuk memastikan dimensi Anda cocok dengan array lain yang ingin Anda gunakan untuk komputasi.
Operasi lain yang mungkin berguna saat Anda mengubah bentuk array adalah ravel(). Fungsi ini memungkinkan Anda meratakan array. Ini berarti bahwa jika Anda memiliki array 2D, 3D, atau n-D, Anda dapat menggunakan fungsi ini untuk meratakannya menjadi array 1-D.
Cukup praktis, bukan?
Cara Menambahkan (Append) Array
Saat Anda menambahkan array ke array asli, array tersebut “direkatkan” ke akhir array asli tersebut. Jika Anda ingin memastikan bahwa yang Anda tambahkan tidak berada di akhir array, Anda dapat mempertimbangkan untuk menyisipkannya. Buka bagian berikut jika Anda ingin tahu lebih banyak.
Menambahkan adalah hal yang cukup mudah dilakukan berkat pustaka NumPy; Anda dapat menggunakan np.append().
Periksa cara melakukannya pada potongan kode di bawah. Jangan lupa bahwa Anda selalu dapat memeriksa array mana yang dimuat dengan mengetik, misalnya, my_array di shell IPython dan menekan ENTER.
import numpy as np
my_array = np.array([1,2,3,4])
# Print `my_array` before appending
print("my_array before appending:", my_array)
# Append a 1D array to `my_array`
new_array = np.append(my_array, [7, 8, 9, 10])
# Print `new_array`
print("new_array:", new_array)
# Print `my_array` after appending
print("my_array after appending:", my_array)
Keluaran:
my_array before appending: [1 2 3 4]
new_array: [ 1 2 3 4 7 8 9 10]
my_array after appending: [1 2 3 4]
Perhatikan bahwa my_array tetap tidak berubah setelah append karena np.append() mengembalikan array baru alih-alih memodifikasi array asli di tempat.
Menambahkan ke my_2d_array:
import numpy as np
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Print `my_2d_array` before appending
print("my_2d_array before appending:\n", my_2d_array)
# Append an extra column to `my_2d_array`
new_2d_array = np.append(my_2d_array, [[7], [8]], axis=1)
# Print `new_2d_array`
print("new_2d_array:\n", new_2d_array)
# Print `my_2d_array` after appending
print("my_2d_array after appending:\n", my_2d_array)
Keluaran:
my_2d_array before appending:
[[1 2 3 4]
[5 6 7 8]]
new_2d_array:
[[1 2 3 4 7]
[5 6 7 8 8]]
my_2d_array after appending:
[[1 2 3 4]
[5 6 7 8]]
Perhatikan bagaimana, saat Anda menambahkan kolom ekstra ke my_2d_array, axis ditentukan. Ingat bahwa axis 1 menunjukkan kolom, sementara axis 0 menunjukkan baris dalam array 2-D.
Cara Menyisipkan dan Menghapus Elemen Array
Selain menambahkan, Anda juga dapat menyisipkan dan menghapus elemen array. Seperti yang mungkin sudah Anda duga, fungsi yang memungkinkan Anda melakukan operasi ini adalah np.insert() dan np.delete():
import numpy as np
my_array = np.array([1,2,3,4])
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Insert `5` at index 1
np.insert(my_array, 1, 5)
# Delete the value at index 1
np.delete(my_array,[1])
Cara Menggabungkan dan Memisahkan Array
Anda juga dapat ‘menggabungkan’ atau join array Anda. Ada banyak fungsi yang dapat Anda gunakan untuk tujuan tersebut dan sebagian besar tercantum di bawah.
Cobalah, tetapi pastikan juga untuk menguji shape array di shell IPython. Array yang telah dimuat adalah x, my_array, my_resized_array dan my_2d_array.
import numpy as np
x = np.ones((4,))
my_array = np.array([1,2,3,4])
my_resized_array=np.resize(my_array,(2,4))
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
# Concatentate `my_array` and `x`
print(np.concatenate((my_array,x)))
# Stack arrays row-wise
print(np.vstack((my_array, my_2d_array)))
# Stack arrays row-wise
print(np.r_[my_resized_array, my_2d_array])
# Stack arrays horizontally
print(np.hstack((my_resized_array, my_2d_array)))
# Stack arrays column-wise
print(np.column_stack((my_resized_array, my_2d_array)))
# Stack arrays column-wise
print(np.c_[my_resized_array, my_2d_array])
Anda akan mencatat beberapa hal saat melalui fungsi-fungsi ini:
- Jumlah dimensi harus sama jika Anda ingin menggabungkan dua array dengan np.concatenate(). Dengan demikian, jika Anda ingin menggabungkan sebuah array dengan my_array, yang 1-D, Anda harus memastikan bahwa array kedua yang Anda miliki juga 1-D.
- Dengan np.vstack(), Anda dengan mudah menggabungkan my_array dengan my_2d_array. Anda hanya perlu memastikan bahwa, saat menumpuk array secara baris (row-wise), jumlah kolom di kedua array sama. Dengan demikian, Anda juga bisa menambahkan array dengan shape (2,4) atau (3,4) ke my_2d_array, selama jumlah kolomnya cocok. Dinyatakan berbeda, array harus memiliki shape yang sama di sepanjang semua kecuali sumbu pertama. Hal yang sama juga berlaku saat Anda ingin menggunakan np.r[].
- Untuk np.hstack(), Anda harus memastikan bahwa jumlah dimensi sama dan jumlah baris di kedua array sama. Itu berarti Anda dapat menumpuk array seperti (2,3) atau (2,4) ke my_2d_array, yang sendiri memiliki shape (2,4). Apa pun dimungkinkan selama Anda memastikan jumlah barisnya cocok. Fungsi ini masih didukung oleh NumPy, tetapi Anda sebaiknya lebih memilih np.concatenate() atau np.stack().
- Dengan np.column_stack(), Anda harus memastikan bahwa array yang Anda masukkan memiliki dimensi pertama yang sama. Dalam kasus ini, kedua shape sama, tetapi jika my_resized_array berukuran (2,1) atau (2,), array tetap akan ditumpuk.
- np.c_[] adalah cara lain untuk menggabungkan. Di sini juga, dimensi pertama dari kedua array harus cocok.
Saat Anda telah menggabungkan array, Anda mungkin juga ingin memisahkannya pada titik tertentu. Sama seperti Anda dapat menumpuknya secara horizontal, Anda juga dapat melakukan hal yang sama tetapi secara vertikal. Anda menggunakan np.hsplit() dan np.vsplit(), masing-masing:
import numpy as np
my_array = np.array([1,2,3,4])
my_resized_array=np.resize(my_array,(2,4))
my_2d_array = np.array([[1,2,3,4], [5,6,7,8]], dtype=np.int64)
my_stacked_array = np.hstack((my_resized_array, my_2d_array))
# Split `my_stacked_array` horizontally at the 2nd index
print(np.hsplit(my_stacked_array, 2))
# Split `my_stacked_array` vertically at the 2nd index
print(np.vsplit(my_stacked_array, 2))
Yang perlu Anda ingat saat menggunakan kedua fungsi split ini mungkin adalah shape array Anda. Ambil kasus di atas sebagai contoh: my_stacked_array memiliki shape (2,8). Jika Anda ingin memilih indeks tempat pemisahan terjadi, Anda harus mengingat shape tersebut.
Cara Memvisualisasikan Array NumPy
Terakhir, sesuatu yang pasti akan berguna adalah mengetahui cara memplot array Anda. Ini sangat berguna dalam eksplorasi data, tetapi juga pada tahap selanjutnya alur kerja ilmu data, ketika Anda ingin memvisualisasikan array Anda.
Dengan np.histogram()
Berlawanan dengan apa yang mungkin disarankan fungsi tersebut, fungsi np.histogram() tidak menggambar histogram tetapi menghitung kejadian dari array yang masuk ke setiap bin; Ini akan menentukan area yang ditempati setiap batang histogram Anda.
Yang Anda teruskan ke fungsi np.histogram() pertama-tama adalah data masukan atau array yang Anda gunakan. Array akan diratakan saat histogram dihitung.
# Import `numpy` as `np`
import numpy as np
# Initialize your array
my_3d_array = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [9,10,11,12]]], dtype=np.int64)
# Pass the array to `np.histogram()`
print(np.histogram(my_3d_array))
# Specify the number of bins
print(np.histogram(my_3d_array, bins=range(0,13)))
Anda akan melihat bahwa sebagai hasilnya, histogram akan dihitung: array pertama mencantumkan frekuensi untuk semua elemen array Anda, sedangkan array kedua mencantumkan bin yang akan digunakan jika Anda tidak menentukan bin apa pun.
Jika Anda menentukan jumlah bin, hasil komputasi akan berbeda: angka pecahan (float) akan hilang dan Anda akan melihat semua bilangan bulat untuk bin.
Masih ada beberapa argumen lain yang dapat Anda tentukan yang dapat memengaruhi histogram yang dihitung. Anda dapat menemukan semuanya di sini.
Tetapi apa gunanya menghitung histogram seperti itu jika Anda tidak dapat memvisualisasikannya?
Visualisasi sangat mudah dengan bantuan Matplotlib, tetapi Anda tidak memerlukan np.histogram() untuk menghitung histogram. plt.hist() melakukan ini sendiri saat Anda meneruskan data (yang telah diratakan) dan bin:
# Import numpy and matplotlib
import numpy as np
import matplotlib.pyplot as plt
# Construct the histogram with a flattened 3d array and a range of bins
plt.hist(my_3d_array.ravel(), bins=range(0,13))
# Add a title to the plot
plt.title('Frequency of My 3D Array Elements')
# Show the plot
plt.show()
Kode di atas kemudian akan memberi Anda histogram (dasar) berikut:

Menggunakan np.meshgrid()
Cara lain untuk memvisualisasikan array Anda (secara tidak langsung) adalah dengan menggunakan np.meshgrid(). Masalah yang Anda hadapi dengan array adalah bahwa Anda memerlukan array 2-D dari nilai koordinat x dan y. Dengan fungsi di atas, Anda dapat membuat kisi persegi panjang dari array nilai x dan array nilai y: fungsi np.meshgrid() mengambil dua array 1D dan menghasilkan dua matriks 2D yang sesuai dengan semua pasangan (x, y) dalam kedua array. Kemudian, Anda dapat menggunakan matriks ini untuk membuat berbagai macam plot.
np.meshgrid() sangat berguna jika Anda ingin mengevaluasi fungsi pada sebuah kisi, seperti yang ditunjukkan kode di bawah:
# Import NumPy and Matplotlib
import numpy as np
import matplotlib.pyplot as plt
# Create an array
points = np.arange(-5, 5, 0.01)
# Make a meshgrid
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs ** 2 + ys ** 2)
# Display the image on the axes
plt.imshow(z, cmap=plt.cm.gray)
# Draw a color bar
plt.colorbar()
# Show the plot
plt.show()
Kode di atas memberikan hasil berikut:

Melampaui Analisis Data dengan NumPy
Selamat, Anda telah mencapai akhir dari tutorial NumPy!
Anda telah mencakup banyak hal, jadi sekarang Anda harus memastikan untuk mempertahankan pengetahuan yang telah Anda peroleh. Jangan lupa dapatkan salinan lembar contekan NumPy dari DataCamp untuk membantu Anda melakukan ini!
Setelah semua teori ini, sekarang saatnya untuk mendapatkan lebih banyak latihan dengan konsep dan teknik yang telah Anda pelajari dalam tutorial ini. Salah satu caranya adalah kembali ke tutorial scikit-learn dan mulai bereksperimen lebih lanjut dengan array data yang digunakan untuk membangun model machine learning.
Jika ini bukan kesukaan Anda, periksa lagi apakah Anda telah mengunduh Anaconda. Lalu, mulailah dengan array NumPy di Jupyter dengan Panduan Definitif untuk Jupyter Notebook ini. Juga pastikan untuk memeriksa Jupyter Notebook ini, yang juga memandu Anda melalui analisis data di Python dengan NumPy dan beberapa pustaka lain dalam lingkungan ilmu data interaktif Jupyter Notebook.
Terakhir, pertimbangkan untuk memeriksa kursus DataCamp tentang manipulasi dan visualisasi data. Terutama kursus terbaru kami yang berkolaborasi dengan Continuum Analytics pasti akan menarik bagi Anda! Lihat Manipulating DataFrames with Pandas atau kursus Pandas Foundations.
