NumPy Tutorials

NumPy Dizilerine Verimli Eleman Ekleme

Spread the love

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ş

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir