NumPy, Python’daki en popüler bilimsel hesaplama kütüphanelerinden biridir. Genellikle çok boyutlu diziler (arrays) ve matematiksel işlemlerle ilişkilendirilir, ancak bazı az bilinen fonksiyonlar da oldukça etkilidir ve belirli senaryolarda kullanışlıdır. İşte bu fonksiyonlardan bazıları:
np.linspace() ve np.logspace()
np.linspace(start, stop, num) ve np.logspace(start, stop, num) fonksiyonları, sırasıyla belirli bir aralıktaki sayıları eşit aralıklarla veya logaritmik aralıklarla oluşturmanıza olanak tanır. Örneğin, bir şirketin geçmiş yıllardaki aylık satış verilerine dayanarak gelecek aylardaki satışları tahmin etmek istediğimizi düşünelim:
import numpy as np
import matplotlib.pyplot as plt
# Geçmiş aylık satış verileri (örnek veri)
past_sales = np.array([200, 220, 250, 300, 320, 350, 400, 420, 450, 500, 520, 550])
# Geçmiş ayları temsil eden zaman dilimleri (0'dan başlayarak)
past_months = np.arange(len(past_sales))
# Gelecek ayları temsil eden zaman dilimlerini oluşturmak için np.linspace kullanalım
future_months = np.linspace(start=len(past_sales), stop=len(past_sales) + 12, num=12, endpoint=True)
# Bir tahmin modeli oluşturmak için, geçmiş satış verilerini bir fonksiyonla modelleyelim
def sales_model(month, base_sales, growth_rate):
return base_sales * (1 + growth_rate) ** month
# İdeal bir büyüme oranı seçelim (örnek veri)
growth_rate = 0.03
# Gelecek aylardaki tahmini satışları hesaplayalım
predicted_sales = sales_model(future_months, past_sales[-1], growth_rate)
# Geçmiş ve tahmini satışları bir araya getirerek bir grafik oluşturalım
plt.plot(past_months, past_sales, label='Geçmiş Satışlar', marker='o')
plt.plot(future_months, predicted_sales, label='Tahmini Satışlar', marker='o')
plt.title('Geçmiş ve Tahmini Aylık Satışlar')
plt.xlabel('Aylar')
plt.ylabel('Satış Miktarı')
plt.legend()
plt.show()
np.meshgrid()
np.meshgrid() fonksiyonu, iki 1D diziyi kullanarak 2D bir kılavuz oluşturmanıza yardımcı olur. Örneğin:
import numpy as np
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
X, Y = np.meshgrid(x, y)
np.vectorize()
np.vectorize() fonksiyonu, bir fonksiyonu vektörize eder, yani bu fonksiyonu bir dizi üzerinde çalıştırabilir hale getirir. Örneğin:
import numpy as np
def my_function(x):
return x ** 2 + 1
vectorized_function = np.vectorize(my_function)
np.fft.fft()
np.fft.fft() fonksiyonu, Hızlı Fourier Dönüşümü (FFT) uygulayarak sinyal işlemede kullanılır. Örneğin:
import numpy as np
signal = np.array([1, 2, 3, 4])
fft_result = np.fft.fft(signal)
np.einsum()
np.einsum() fonksiyonu, Einstein toplama kurallarını kullanarak çoklu diziler üzerinde işlemler yapmanıza olanak tanır. Örneğin, bir şirketin satış ve maliyet verilerini içeren iki matrisi çarparak karını hesaplamak istediğimizi düşünelim. Bu işlem, her bir ürün ve ay için karı hesaplar. Bu matrisin her elemanı, ilgili ürünün belirli bir aydaki satış gelirinin, o aydaki maliyetine çarpılması ile hesaplanır.
import numpy as np
# Satışları temsil eden matris (örneğin, her satır bir ürünü, her sütun bir ayı temsil edebilir)
sales_matrix = np.array([[100, 150, 200], [120, 130, 180]])
# Maliyetleri temsil eden matris (aynı boyutta bir matris)
cost_matrix = np.array([[60, 70, 80], [40, 50, 60]])
# Matris çarpımını np.einsum kullanarak hesapla
profit_matrix = np.einsum('ij,ij->ij', sales_matrix, cost_matrix)
print("Profit Matrix:")
print(profit_matrix)
np.gradient()
Son olarak bu yazımızda kripto paraların günlük getirisini hesaplamak için np.gradient() fonksiyonunu kullanarak bir örnek oluşturalım. Bu örnekte, kripto para günlük kapanış fiyatları üzerinden getiri hesaplamasını gerçekleştireceğiz.
import numpy as np
import matplotlib.pyplot as plt
# Kripto para verisi örneği: Günlük kapanış fiyatları (örnek veri)
crypto_prices = np.array([50000, 52000, 48000, 55000, 60000, 58000, 62000, 65000, 63000, 67000])
# Zaman dilimini temsil eden bir dizi oluştur
days = np.arange(len(crypto_prices))
# Kapanış fiyatlarını gösteren bir grafik oluştur
plt.plot(days, crypto_prices, label='Kapanış Fiyatları', marker='o', color='blue')
plt.title('Kripto Para Günlük Kapanış Fiyatları')
plt.xlabel('Günler')
plt.ylabel('Fiyat (USD)')
plt.legend()
plt.show()
# Kripto para kapanış fiyatlarındaki getiriyi np.gradient() ile hesapla
crypto_returns = np.gradient(crypto_prices)
# Getirileri gösteren bir grafik oluştur
plt.plot(days, crypto_returns, label='Günlük Getiri', marker='o', color='orange')
plt.title('Kripto Para Günlük Getirileri')
plt.xlabel('Günler')
plt.ylabel('Getiri')
plt.legend()
plt.show()
Bu örnekte, crypto_prices dizisi, günlük kripto para kapanış fiyatlarını temsil eder. İlk grafikte bu kapanış fiyatlarını, ikinci grafikte ise kripto paranın günlük getirisini görebilirsiniz. Bu tür analizler, kripto para piyasasındaki fiyat hareketlerini anlamak ve gelecekteki performansı değerlendirmek için kullanılabilir.
Bu fonksiyonlar, NumPy’nin güçlü özelliklerinden sadece bazılarıdır ve belirli kullanım senaryolarında oldukça faydalıdır.
Numpy Nasıl Hızlandırılabilir ?
NumPy, genel amaçlı bir bilimsel hesaplama kütüphanesi olup, özellikle çok boyutlu dizilerle çalışmak için optimize edilmiştir. Ancak, bazı spesifik uygulamalarda NumPy’yi daha da hızlandırmak için özel olarak tasarlanmış bazı kütüphaneler ve araçlar vardır. İşte NumPy ile birlikte kullanılan ve performans artışı sağlayan bazı kütüphaneler:
- Numexpr: NumPy ifadelerini daha hızlı bir şekilde değerlendirmek için tasarlanmıştır. Büyük veri setleri üzerinde element-wise işlemleri hızlandırmak için kullanılır.
- Numba: Python fonksiyonlarını JIT (Just-In-Time) derlemesi ile C veya Fortran benzeri hızlı makine koduna dönüştürmek için kullanılır. Özellikle döngüler içeren işlemleri hızlandırmak için etkilidir.
- Cython: Python’u C diliyle birleştirerek hızlı C eklentileri oluşturmanızı sağlar. NumPy dizileri ile uyumlu ve performansı artırmak için kullanışlıdır.
- BLAS (Basic Linear Algebra Subprograms) ve LAPACK (Linear Algebra PACKage): Temel lineer cebir işlemlerini gerçekleştirmek için optimize edilmiş kütüphanelerdir. NumPy, bu kütüphaneleri altında kullanarak birçok lineer cebir operasyonunu hızlı bir şekilde gerçekleştirir.
- Scipy: Bilimsel ve teknik hesaplamalar için kullanılan bir kütüphanedir. NumPy’yi temel alarak, özel amaçlı algoritmalar, optimizasyon, entegrasyon, interpolasyon gibi birçok fonksiyonu içerir.
- MKL (Math Kernel Library): Intel tarafından geliştirilen bir kütüphanedir ve özellikle Intel işlemcileri üzerinde optimize edilmiştir. NumPy, MKL’yi kullanarak performansını artırabilir.
- TensorFlow ve PyTorch: Derin öğrenme uygulamalarında yaygın olarak kullanılan bu kütüphaneler, özellikle büyük ölçekli matris operasyonları gibi işlemleri GPU’lar üzerinde hızlandırır.
Bu kütüphaneler, NumPy’yi destekler ve belirli uygulamalarda daha fazla performans sağlar. Ancak, genel olarak NumPy, çoğu bilimsel ve teknik hesaplama uygulaması için yeterince hızlıdır ve geniş bir kullanıcı kitlesi tarafından tercih edilmektedir. Uygulamanın özel gereksinimlerine ve kullanılan donanıma bağlı olarak, belirli bir kütüphanenin avantajları değişebilir.