NumPy Dizilerine Etkin Eleman Ekleme
Python’ın bilimsel hesaplama ekosisteminin temel taşlarından biri olan NumPy, güçlü N-boyutlu dizi nesneleri sağlar. Bu diziler, standart Python listelerine göre önemli performans avantajları sunar, ancak doğrudan eleman eklemek beklenildiği kadar basit veya verimli değildir. Bu öğretici, NumPy dizilerine eklemenin verimli alternatiflerini ele almaktadır.
İçerik Tablosu
- Giriş
- Doğrudan Eklemeden Neden Kaçınılmalı?
- Önceden Ayırma
- Birleştirme
- Dikey ve Yatay Yığma
- Liste Kavrama ve Dizi Oluşturma
- Doğru Yöntemi Seçme
- Sonuç
Giriş
NumPy dizileri, verimli sayısal işlemler için tasarlanmıştır. Sabit boyutları, bu verimliliğe önemli ölçüde katkıda bulunur. Dinamik olarak boyut değiştiren Python listelerinin aksine, bir listenin append()
yöntemine benzer yöntemler kullanarak bir NumPy dizisine doğrudan eleman ekleme denemesi bir hatayla sonuçlanır. Bunun nedeni, boyutlandırmanın tamamen yeni bir dizi oluşturmayı, eski verileri kopyalamayı ve ardından yeni elemanı eklemeyi gerektirmesidir – özellikle büyük diziler ve sık eklemeler için hesaplama açısından pahalı bir işlem.
Doğrudan Eklemeden Neden Kaçınılmalı?
NumPy dizilerine doğrudan ekleme verimsizdir çünkü tekrarlanan dizi oluşturma ve veri kopyalama içerir. Bu, özellikle büyük veri kümeleri veya sık ekleme işlemleriyle uğraşırken önemli performans düşüşüne yol açar. Bellek ayırma ve veri aktarımı gideri, basit eklemenin avantajından çok daha fazladır.
Önceden Ayırma
En verimli yaklaşım genellikle istenen son boyutta bir diziyi önceden ayırmak ve ardından onu yinelemeli olarak doldurmaktır. Bu, tekrarlanan eklemenin doğasında bulunan tekrarlanan dizi oluşturmadan kaçınır.
import numpy as np
size = 1000
arr = np.empty(size, dtype=int) # Daha iyi performans için dtype belirtin
for i in range(size):
arr[i] = i * 2 # Bazı değerlerle doldurun
print(arr)
Birleştirme
numpy.concatenate
, mevcut dizileri mevcut bir eksen boyunca verimli bir şekilde birleştirir. Birleştirmek istediğiniz birden fazla diziniz olduğunda idealdir.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr_combined = np.concatenate((arr1, arr2))
print(arr_combined) # Çıktı: [1 2 3 4 5 6]
arr3 = np.array([[1,2],[3,4]])
arr4 = np.array([[5,6],[7,8]])
arr_combined_2d = np.concatenate((arr3,arr4), axis=0) #axis=0 dikey birleştirme için, axis=1 yatay birleştirme için
print(arr_combined_2d)
Dikey ve Yatay Yığma
Dizilerin dikey (satır bazında) ve yatay (sütun bazında) yığınlanması için numpy.vstack
ve numpy.hstack
kullanışlı fonksiyonlar sağlar.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr_vstack = np.vstack((arr1, arr2)) # Dikey yığma
arr_hstack = np.hstack((arr1, arr2)) # Yatay yığma
print("Dikey Yığma:n", arr_vstack)
print("nYatay Yığma:n", arr_hstack)
Liste Kavrama ve Dizi Oluşturma
Yineleyicilerden diziler oluşturmak için, liste kavrama ile birlikte numpy.array
özlü ve verimli olabilir.
import numpy as np
arr = np.array([i**2 for i in range(10)])
print(arr)
Doğru Yöntemi Seçme
En uygun yöntem, belirli kullanım durumunuza bağlıdır:
- Önceden Ayırma: Büyük bir diziyi sıralı olarak doldurmak için en iyisidir.
concatenate
: Birden fazla mevcut diziyi birleştirmek için idealdir.vstack
/hstack
: Dikey veya yatay yığma için uygundur.- Liste kavrama +
numpy.array
: Yineleyicilerden diziler oluşturmak için özlüdür.
Sonuç
NumPy dizileri Python listeleri gibi doğrudan eklemeyi desteklemese de, verimli alternatifler mevcuttur. Bu yöntemleri anlamak, performanslı sayısal kod yazmak için çok önemlidir. En uygun verimlilik için mümkün olduğunda önceden ayırmayı önceliklendirin.