Movatterモバイル変換


[0]ホーム

URL:


İçeriğe atla
VikipediÖzgür Ansiklopedi
Ara

NumPy

Vikipedi, özgür ansiklopedi
NumPy
Orijinal yazar(lar)Travis Oliphant
Geliştirici(ler)Açık kaynak
İlk yayınlanma2016 (8 yıl önce) (2016)
Güncel sürüm2.2.3[1] Bunu Vikiveri'de düzenleyin 13 Şubat 2025
Programlama diliPython,C
İşletim sistemiÇapraz platform yazılımı
LisansBSD
Resmî sitesinumpy.org
Kod deposuhttps://github.com/numpy/numpy/releases

NumPy,Pythonprogramlama dili için büyük, çok boyutludizileri vematrisleri destekleyen, bu diziler üzerinde çalışacak üst düzey matematiksel işlevler ekleyen bir kitaplıktır.[2] NumPy'nin atası Numeric, ilk olarak Jim Hugunin tarafından diğer birkaç geliştiricinin katkılarıyla oluşturuldu. 2005 yılında Travis Oliphant, Numarray'in özelliklerini kapsamlı değişikliklerle Numeric'e dahil ederek NumPy'yi yarattı.

NumPyaçık kaynaklı bir yazılımdır ve birçok katkıda bulunanlara sahiptir.

Tarihçe

[değiştir |kaynağı değiştir]

Python programlama dili, başlangıçta sayısal hesaplama için tasarlanmamıştı ancak erken dönemlerde bilim ve mühendislik topluluğunun dikkatini çekti. 1995 yılında, bir dizi hesaplama paketini tanımlamak amacıyla özel ilgi grubu (special interest group) matrix-sig kuruldu; üyeleri arasında, dizi hesaplamayı kolaylaştırmak için Python'unsözdizimini (özellikle dizin oluşturma sözdizimini[3]) genişleten Python tasarımcısı ve sürdürücüGuido van Rossum vardı.[4]

Birmatris paketinin bir uygulaması Jim Fulton tarafından tamamlandı, daha sonra Jim Hugunin tarafından genelleştirildi ve Numeric[4] olarak adlandırıld. ("Sayısal Python uzantıları (Numerical Python extensions)" veya "NumPy" olarak da bilinmektedir).[5][6]Massachusetts Teknoloji Enstitüsü'nde yüksek lisans öğrencisi olan Hugunin, 1997 yılındaJPython üzerinde çalışmak üzere Ulusal Araştırma Girişimleri Kurumuna (en) katıldı.[6] Diğer erken katkıda bulunanlar arasında David Ascher, Konrad Hinsen ve Travis Oliphant yer aldı.[6]

Numeric için daha esnek bir yedek olarak Numarray adlı yeni bir paket yazıldı.[7] Numeric gibi, o da artık kullanımdan kaldırıldı.[8][8] Numarray, büyük diziler için daha hızlı işlemlere sahipti, ancak küçük dizilerde Numeric'den daha yavaştı.[9] Bu nedenle bir süre her iki paket de farklı kullanım durumları için paralel olarak kullanıldı. Numeric'in son sürümü (v24.2) 11 Kasım 2005'te, numarray'in son sürümü (v1.5.2) ise 24 Ağustos 2006'da yayınlandı.[10]

Numeric'i Pythonstandart kütüphanesine sokma arzusu vardı, ancak Guido van Rossum, kodun o zamanki durumunda korunamayacağına karar verdi.[11]

2005'in başlarında, NumPy geliştiricisi Travis Oliphant, topluluğu tek bir dizi paketi etrafında birleştirmek istedi ve Numarray'in özelliklerini Numeric'e taşıdı. Bunun sonucunda 2006'da NumPy 1.0 olarak yayınlandı.[7] Bu yeni proje SciPy'nin bir parçasıydı. Sadece bir dizi nesnesi elde etmek için büyük SciPy paketi kurmak yerine bu yeni paket ayrıldı ve NumPy olarak adlandırıldı. Python3 desteği 2011'de NumPy sürüm 1.5.0 ile eklendi.[12]

2011'dePyPy,PyPy için NumPyAPI'sinin bir uygulaması üzerinde geliştirmeye başladı.[13] NumPy ile henüz tam uyumlu değildi.[13]

Özellikleri

[değiştir |kaynağı değiştir]

NumPy, optimize etmeyen bir bayt kodu yorumlayıcısı olan Python'unCPython referans uygulamasını hedeflemektedir. Python'un bu sürümü için yazılan matematikselalgoritmalar, genellikle derlenmiş eşdeğerlerinden çok daha yavaş çalışmaktadır. NumPy, çok boyutlu diziler ve diziler üzerinde verimli çalışan işlevler ve operatörler sağlayarak yavaşlık sorununu kısmen ele alır. Bunları yapmak için NumPy kullanarak, çoğunlukla iç döngüler olmak üzere bazı kodların yeniden yazılmasını gerekmektedir.

Python'da NumPy kullanmak, her ikisi de yorumlandığındanMATLAB ile karşılaştırılabilir işlevsellik sağlamaktadır. Çoğu işlemskalerler yerine diziler veyamatrisler üzerinde çalıştığı sürece, her ikisi de kullanıcının hızlı programlar yazmasına izin vermektedir.[14] Her ikisi karşılaştırıldığında, MATLAB çok sayıda ek araç kutusuna, özellikle Simulink'e sahiptir, oysa NumPy daha modern ve eksiksiz bir programlama dili olan Python ile entegredir. Ayrıca, tamamlayıcı Python paketleri mevcuttur; SciPy, daha fazla MATLAB benzeri işlevsellik ekleyen bir kütüphanedir. Ayrıca Matplotlib, MATLAB benzeri çizim işlevselliği sağlayan bir çizim paketidir. Dahili olarak, hem MATLAB hem de NumPy, verimlilineer cebir hesaplamaları için BLAS ve LAPACK'e güvenmektedir

Yaygın olarak kullanılanbilgisayarlı görü kitaplığıOpenCV'nin Python verilerini depolamak ve üzerinde çalışmak için NumPy dizilerini kullanmaktadır. Birden çok kanala sahip görüntüler basitçe üç boyutlu diziler olarak temsil edildiğinden, indeksleme, dilimleme veya diğer dizilerle maskeleme, bir görüntünün belirli piksellerine erişmenin çok etkili yollarıdır. OpenCV'de görüntüler, çıkarılan özellik noktaları, filtre çekirdekleri ve daha pek çok şey için evrenselveri yapısı olarak NumPy dizisi, programlama iş akışını ve hata ayıklamayı büyük ölçüde basitleştirmektedir.

ndarray veri yapısı

[değiştir |kaynağı değiştir]

NumPy'nin temel işlevi, n-boyutlu dizi veri yapısı için "ndarray"idir. Bu diziler,bellekte adım adım görünümlerdir.[7] Python'un yerleşik liste veri yapısının aksine, bu diziler homojen olarak yazılmaktadır. Tek bir dizinin tüm elemanları aynı tipte olmalıdır.

Bu tür diziler ayrıcaC/C++,Cython veFortran uzantıları tarafından CPython yorumlayıcısına ayrılan bellek arabelleklerine, veri kopyalamaya gerek kalmadan mevcut sayısal kitaplıklarla bir dereceye kadar uyumluluk sağlayan görünümler olabilmektedir. Bu işlevsellik, bu tür kitaplıkları (özellikle BLAS ve LAPACK) saran SciPy paketi tarafından kullanılmaktadır. NumPy, bellek eşlemeli ndarray'ler için yerleşik desteğe sahiptir.[7]

Sınırlamalar

[değiştir |kaynağı değiştir]

Bir diziye giriş eklemek, Python listelerinde olduğu kadar kolay bir şekilde mümkün değildir. Dizileri genişletmek için​np.pad(...)​ yolu aslında istenen şekil ve dolgu değerlerine sahip yeni diziler yaratmaktadır. Ayrıca verilen diziyi yenisine kopyalar ve yeni diziyi döndürmektedir. NumPy'nin​np.concatenate([a1,a2])​ işlemi aslında iki diziyi birbirine bağlamaz, ancak sırayla verilen her iki dizideki girişlerle dolu yeni bir tane döndürmektedir. Bir dizinin boyutsallığını​np.reshape(...)​ ile yeniden şekillendirmek ancak dizideki eleman sayısı değişmediği sürece mümkündür.

Bu koşullar, NumPy'nin dizilerinin bitişik bellek arabelleklerinde görünümler olması gerektiği gerçeğinden kaynaklanmaktadır. Blaze adlı bir değiştirme paketi bu sınırlamayı aşmaya çalışmaktadır.[15]

Vektörleştirilmiş bir işlem olarak ifade edilemeyen algoritmalar, "saf Python"da uygulanmaları gerektiğinden daha yavaş çalışmaktadır. Vektörleştirme ise bazı işlemlerin bellek karmaşıklığını sabitten doğrusala yükseltebilmektedir. Çünkü girdiler kadar büyük olan geçici diziler oluşturulmalıdır. Sayısal kodun çalışma zamanı derlemesi, bu sorunlardan kaçınmak için birkaç grup tarafından uygulanmıştır. NumPy ile birlikte çalışan açık kaynaklı çözümler arasında​scipy.weave​, numepr[16] ve Numba[17] bulunmaktadır. Cython ve Pythran bunlara statik derleme alternatifleridir.

Birçok modern büyük ölçekli bilimsel hesaplama uygulamasının, NumPy dizilerinin yeteneklerini aşan gereksinimleri vardır. Örneğin, NumPy dizileri genelliklebüyük veri kümelerinin analizi için yetersiz kapasiteye sahip olabilecek bir bilgisayarın belleğine yüklenmektedir. Ayrıca NumPy işlemleri tek birCPU üzerinde yürütülmektedir. Bununla birlikte, birçok doğrusal cebir işlemi, CPU kümelerinde veya birçokderin öğrenme uygulamasının güvendiği GPU'lar ve TPU'lar gibi özel donanımlarda yürütülerek hızlandırılabilmektedir.

Sonuç olarak, son yıllarda bilimsel Python ekosisteminde dağıtılmış diziler için Dask ve GPU'lardaki hesaplamalar içinTensorFlow veya JAX gibi çeşitli alternatif dizi uygulamaları ortaya çıkmıştır. Popülaritesi nedeniyle, bunlar genellikle Numpy'ninAPI'sinin bir alt kümesini uygulamaktadır veya onu taklit etmektedir. Böylece kullanıcılar kodlarında gereken minimum değişiklikle dizi uygulamalarını değiştirebilmektedir.[18] Nvidia'nınCUDA çerçevesi tarafından hızlandırılan ve yakın zamanda tanıtılan CUPy[19] adlı bir kitaplık, NumPy'nin 'açılan bir ikamesi' olarak daha hızlı bilgi işlem potansiyeli göstermiştir.[20]

Örnekler

[değiştir |kaynağı değiştir]

Dizi(Array) oluşturma

[değiştir |kaynağı değiştir]
importnumpyasnpx=np.array([1,2,3])print(x)#array([1, 2, 3])y=np.arange(10)print(y)#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Basit operatörler

[değiştir |kaynağı değiştir]
a=np.array([1,2,3,6])b=np.linspace(0,2,4)c=a-bprint(c)#array([ 1., 1.33333333, 1.66666667, 4.])print(a**2)#array([ 1,  4,  9, 36])

Evrensel fonksiyonlar

[değiştir |kaynağı değiştir]
a=np.linspace(-np.pi,np.pi,100)b=np.sin(a)c=np.cos(a)

Lineer cebir

[değiştir |kaynağı değiştir]
fromnumpy.randomimportrandfromnumpy.linalgimportsolve,inva=np.array([[1,2,3],[3,4,6.7],[5,9.0,5]])a.transpose()print(a)#array([[ 1. ,  3. ,  5. ],#       [ 2. ,  4. ,  9. ],#       [ 3. ,  6.7,  5. ]])print(inv(a))#array([[-2.27683616,  0.96045198,  0.07909605],#       [ 1.04519774, -0.56497175,  0.1299435 ],#       [ 0.39548023,  0.05649718, -0.11299435]])b=np.array([3,2,1])print(solve(a,b))# ax = b denklemini çöz#array([-4.83050847,  2.13559322,  1.18644068])c=rand(3,3)*20# 20 ile ölçeklenmiş [0,1] içinde 3x3 rastgele değerler matrisi oluşturunprint(c)#array([[  3.98732789,   2.47702609,   4.71167924],#       [  9.24410671,   5.5240412 ,  10.6468792 ],#       [ 10.38136661,   8.44968437,  15.17639591]])print(np.dot(a,c))# matris çarpımı#array([[  53.61964114,   38.8741616 ,   71.53462537],#       [ 118.4935668 ,   86.14012835,  158.40440712],#       [ 155.04043289,  104.3499231 ,  195.26228855]])

Tensörler

[değiştir |kaynağı değiştir]
M=np.zeros(shape=(2,3,5,7,11))T=np.transpose(M,(4,2,1,3,0))print(T.shape)#(11, 5, 3, 7, 2)

Kaynakça

[değiştir |kaynağı değiştir]
  1. ^"Release 2.2.3". 13 Şubat 2025. Erişim tarihi: 25 Şubat 2025. 
  2. ^Harris, Charles R.; Millman, K. Jarrod; van der Walt, Stéfan J.; Gommers, Ralf; Virtanen, Pauli; Cournapeau, David; Wieser, Eric; Taylor, Julian; Berg, Sebastian; Smith, Nathaniel J.; Kern, Robert (17 Eylül 2020)."Array programming with NumPy".Nature (İngilizce).585 (7825): 357-362.doi:10.1038/s41586-020-2649-2.ISSN 0028-0836. 26 Mayıs 2021 tarihinde kaynağındanarşivlendi. Erişim tarihi:11 Haziran 2021. 
  3. ^Singh, Ajit (20 Ocak 2021)."Review of "Array programming with NumPy"".doi:10.14293/s2199-1006.1.sor-uncat.a7759461.v1.raugfi. 
  4. ^abMillman, K. Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers".Computing in Science and Engineering.13 (2): 9–12. Bibcode:2011CSE....13b...9M. doi:10.1109/MCSE.2011.36. Archived from the original on 2019-02-19. Retrieved 2014-07-07.
  5. ^Oliphant, Travis E. (2007)."Python for Scientific Computing".Computing in Science & Engineering.9 (3): 10-20.doi:10.1109/mcse.2007.58.ISSN 1521-9615. 
  6. ^abcDubois, Paul F.; Hinsen, Konrad; Hugunin, James (1996)."Numerical Python".Computers in Physics.10 (3): 262.doi:10.1063/1.4822400.ISSN 0894-1866. 
  7. ^abcdvan der Walt, Stéfan; Colbert, S. Chris; Varoquaux, Gaël (2011). "The NumPy array: a structure for efficient numerical computation".Computing in Science and Engineering. IEEE.13 (2): 22. arXiv:1102.1523. Bibcode:2011CSE....13b..22V. doi:10.1109/MCSE.2011.37. S2CID 16907816.
  8. ^ab"Numarray Homepage". Retrieved 2006-06-24.
  9. ^Travis Oliphant and other SciPy developers. "[Numpy-discussion] Status of Numeric". Retrieved 2 February 2017.
  10. ^"NumPy Sourceforge Files". Retrieved 2008-03-24.
  11. ^"History_of_SciPy - SciPy wiki dump".scipy.github.io.
  12. ^"NumPy 1.5.0 Release Notes". Retrieved 2011-04-29.
  13. ^ab"PyPy Status Blog: NumPy funding and status update". Retrieved 2011-12-22.
  14. ^The SciPy Community. "NumPy for Matlab users". Retrieved 2 February 2017.
  15. ^"Blaze Ecosystem Docs".Read the Docs. Retrieved 17 July 2016.
  16. ^Francesc Alted. "numexpr". Retrieved 8 March 2014.
  17. ^"Numba". Retrieved 8 March 2014.
  18. ^Charles R Harris; K. Jarrod Millman; Stéfan J. van der Walt; et al. (16 September 2020). "Array programming with NumPy" (PDF).Nature.585 (7825): 357–362. doi:10.1038/S41586-020-2649-2. ISSN 1476-4687. PMC 7759461. PMID 32939066. Wikidata Q99413970.
  19. ^Shohei Hido - CuPy: A NumPy-compatible Library for GPU - PyCon 2018, retrieved 2021-05-11
  20. ^Entschev, Peter Andreas (2019-07-23). "Single-GPU CuPy Speedups".Medium. Retrieved 2021-05-11.
"https://tr.wikipedia.org/w/index.php?title=NumPy&oldid=34471313" sayfasından alınmıştır
Kategori:
Gizli kategori:

[8]ページ先頭

©2009-2025 Movatter.jp