Random dan I/O¶
NumPy menyediakan generator bilangan random yang powerful dan fungsi untuk membaca/menulis array ke file.
Bilangan Random¶
Random Dasar¶
import numpy as np
# Set seed untuk reprodusibilitas
np.random.seed(42)
# Random float antara 0 dan 1
print(np.random.random()) # Single value
print(np.random.random(5)) # Array of 5
print(np.random.random((2, 3))) # 2x3 array
# Random integer
print(np.random.randint(1, 10)) # 1 sampai 9
print(np.random.randint(1, 10, size=5)) # Array of 5
print(np.random.randint(1, 10, size=(2, 3))) # 2x3 array
Distribusi Normal¶
import numpy as np
np.random.seed(42)
# Standard normal (mean=0, std=1)
print(np.random.randn(5))
# Normal dengan mean dan std tertentu
mean = 100
std = 15
print(np.random.normal(mean, std, size=5))
# Contoh: simulasi skor IQ
skor_iq = np.random.normal(100, 15, size=1000)
print(f"Mean: {skor_iq.mean():.2f}")
print(f"Std: {skor_iq.std():.2f}")
Distribusi Lainnya¶
import numpy as np
np.random.seed(42)
# Uniform distribution
uniform = np.random.uniform(low=0, high=10, size=5)
print(uniform)
# Binomial distribution
binomial = np.random.binomial(n=10, p=0.5, size=5)
print(binomial)
# Poisson distribution
poisson = np.random.poisson(lam=5, size=5)
print(poisson)
# Exponential distribution
exponential = np.random.exponential(scale=2, size=5)
print(exponential)
Sampling¶
import numpy as np
np.random.seed(42)
data = np.array([10, 20, 30, 40, 50])
# Pilih elemen random
print(np.random.choice(data)) # Satu elemen
print(np.random.choice(data, size=3)) # Dengan replacement
print(np.random.choice(data, size=3, replace=False)) # Tanpa replacement
# Dengan probabilitas
probs = [0.1, 0.1, 0.1, 0.3, 0.4]
print(np.random.choice(data, size=10, p=probs))
# Shuffle array (in-place)
arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)
print(arr) # Urutan teracak
# Permutasi (return copy)
arr = np.array([1, 2, 3, 4, 5])
perm = np.random.permutation(arr)
print(perm) # Array teracak
print(arr) # Original tidak berubah
Generator Baru (NumPy 1.17+)¶
import numpy as np
# Generator lebih modern dan fleksibel
rng = np.random.default_rng(seed=42)
print(rng.random(5))
print(rng.integers(1, 10, size=5))
print(rng.normal(0, 1, size=5))
print(rng.choice([1, 2, 3, 4, 5], size=3))
File I/O¶
Menyimpan dan Membaca Array (.npy)¶
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# Simpan ke file .npy
np.save('array.npy', arr)
# Baca dari file
loaded = np.load('array.npy')
print(loaded)
# [[1 2 3]
# [4 5 6]]
Multiple Arrays (.npz)¶
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# Simpan beberapa array
np.savez('arrays.npz', x=arr1, y=arr2)
# Baca
data = np.load('arrays.npz')
print(data['x']) # [1 2 3]
print(data['y']) # [4 5 6]
# Simpan dengan kompresi
np.savez_compressed('arrays_compressed.npz', x=arr1, y=arr2)
Text Files¶
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# Simpan ke text file
np.savetxt('array.txt', arr, delimiter=',', fmt='%d')
# Isi file:
# 1,2,3
# 4,5,6
# 7,8,9
# Baca dari text file
loaded = np.loadtxt('array.txt', delimiter=',')
print(loaded)
# Dengan header
np.savetxt('array_header.csv', arr,
delimiter=',',
fmt='%d',
header='A,B,C',
comments='')
# Baca dengan skip header
loaded = np.loadtxt('array_header.csv',
delimiter=',',
skiprows=1)
Membaca CSV dengan genfromtxt¶
import numpy as np
# genfromtxt lebih fleksibel untuk data dengan missing values
# Contoh file data.csv:
# nama,nilai1,nilai2
# Ahmad,85,90
# Budi,,78
# Citra,92,88
data = np.genfromtxt('data.csv',
delimiter=',',
skip_header=1,
usecols=(1, 2),
filling_values=0)
print(data)
# [[85. 90.]
# [ 0. 78.]
# [92. 88.]]
Contoh Praktis¶
Simulasi Monte Carlo¶
import numpy as np
def estimate_pi(n_samples):
"""Estimasi nilai pi dengan Monte Carlo"""
rng = np.random.default_rng(42)
# Generate titik random dalam kotak [-1, 1] x [-1, 1]
x = rng.uniform(-1, 1, n_samples)
y = rng.uniform(-1, 1, n_samples)
# Hitung titik di dalam lingkaran
inside = np.sum(x**2 + y**2 <= 1)
# pi/4 = rasio area lingkaran/kotak
return 4 * inside / n_samples
for n in [100, 1000, 10000, 100000]:
print(f"n={n:6d}: pi ≈ {estimate_pi(n):.6f}")
Bootstrap Sampling¶
import numpy as np
def bootstrap_mean(data, n_bootstrap=1000, confidence=0.95):
"""Hitung confidence interval untuk mean"""
rng = np.random.default_rng(42)
n = len(data)
# Generate bootstrap samples
bootstrap_means = np.empty(n_bootstrap)
for i in range(n_bootstrap):
sample = rng.choice(data, size=n, replace=True)
bootstrap_means[i] = np.mean(sample)
# Hitung confidence interval
alpha = 1 - confidence
lower = np.percentile(bootstrap_means, 100 * alpha / 2)
upper = np.percentile(bootstrap_means, 100 * (1 - alpha / 2))
return np.mean(bootstrap_means), lower, upper
# Contoh penggunaan
data = np.random.normal(100, 15, 50)
mean, lower, upper = bootstrap_mean(data)
print(f"Mean: {mean:.2f} ({lower:.2f} - {upper:.2f})")
Simpan Model Sederhana¶
import numpy as np
# Simpan parameter model
weights = np.random.randn(100, 50)
biases = np.random.randn(50)
np.savez('model.npz',
weights=weights,
biases=biases,
metadata={'version': '1.0', 'date': '2026-02-11'})
# Load model
model = np.load('model.npz', allow_pickle=True)
loaded_weights = model['weights']
loaded_biases = model['biases']
loaded_metadata = model['metadata'].item()
print(f"Weights shape: {loaded_weights.shape}")
print(f"Model version: {loaded_metadata['version']}")
Membaca Data Besar dengan memmap¶
import numpy as np
# Untuk file yang sangat besar, gunakan memory mapping
# Ini tidak memuat seluruh file ke memori
# Buat file besar
big_arr = np.random.random((10000, 1000))
np.save('big_array.npy', big_arr)
# Baca dengan memmap (hanya load bagian yang diakses)
mmap = np.load('big_array.npy', mmap_mode='r')
print(mmap.shape) # (10000, 1000)
print(mmap[0:10, 0:5]) # Hanya load bagian ini ke memori
Latihan¶
Generate 1000 sampel dari distribusi normal dan plot histogramnya
Implementasikan simulasi random walk 2D
Simpan dan load dataset dengan metadata menggunakan npz
Implementasikan cross-validation split menggunakan random sampling