Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Сандық бағдарламалау үшін Python кітапханасы
Python library for numerical programming
NumPy (айтылуы '/nʌmpaɪ' NUMpy) – Python бағдарламалау тілі үшін жасалған кітапхана, үлкен, көп өлшемді массивтер мен матрицаларды қолдауға, сондай-ақ осы массивтермен жұмыс істеуге арналған жоғары деңгейдегі математикалық функциялардың кең жиынтығын қосады. NumPy-дің алдындағы Numeric кітапханасын Джим Хагунин және басқа да бірнеше әзірлеушілер бірлесіп құрған. 2005 жылы Трэвис Олифант Numeric кітапханасына Numarray мүмкіндіктерін қосып, кеңейтілген өзгерістер енгізу арқылы NumPy-ді жасады. NumPy – ашық кодты бағдарламалық құрал және көптеген үлес қосушылары бар. NumPy NumFOCUS ұйымының қаржылық қолдауындағы жоба.
NumPy (pronounced '/n//ʌ//m//p//aɪ/ NUMpy) is a library for the Python programming language, adding support for large, multi dimensional arrays and matrices, along with a large collection of high level mathematical functions to operate on these arrays. The predecessor of NumPy, Numeric, was originally created by Jim Hugunin with contributions from several other developers. In 2005, Travis Oliphant created NumPy by incorporating features of the competing Numarray into Numeric, with extensive modifications. NumPy is open source software and has many contributors. NumPy is a NumFOCUS fiscally sponsored project.
матрицалық-сиг
Python бағдарламалау тілі бастапқыда сандық есептеулер үшін жасалмаған, бірақ ғылыми және инженерлік қауымдастықтың назарын ерте тартты. 1995 жылы матрицалық операцияларға арналған топ (SIG) құрылды, мақсаты – массивтік есептеу пакетін анықтау болды; оның мүшелерінің арасында Python дизайнының авторы және бағдарламаны қолдаушы Гвидо ван Россум болды, ол массивтік есептеуді жеңілдету үшін Python синтаксисін (әсіресе индекстеу синтаксисін) кеңейтті. (сонымен қатар "Сандық Python кеңейтімдері" немесе "NumPy" деп белгілі), APL тілдер отбасы, Basis, MATLAB, FORTRAN, S және S+ сияқты тілдердің ықпалымен дамыды. Массачусетс технология институтының (MIT) аспиранты Хугуниннің сөзіне сәйкес, Numarray үлкен массивтермен жұмыс істегенде Numeric-тен жылдам болды, бірақ кішкентай массивтермен жұмыс істегенде баяу болды, сондықтан қысқа мерзімге екі пакет те әртүрлі жағдайларда параллель қолданылды. Numeric-тің соңғы нұсқасы (v24.2) 2005 жылдың 11 қарашасында, ал numarray-тің соңғы нұсқасы (v1.5.2) 2006 жылдың 24 тамызында жарияланды. Numeric-ті Python стандартты кітапханасына қосуға ниет болған, бірақ Гвидо ван Россум кодты сол кездегі күйінде қолдау мүмкін емес деп шешті.
The Python programming language was not originally designed for numerical computing, but attracted the attention of the scientific and engineering community early on. In 1995 the special interest group (SIG) matrix sig was founded with the aim of defining an array computing package; among its members was Python designer and maintainer Guido van Rossum, who extended Python's syntax (in particular the indexing syntax) to make array computing easier. (also variously known as the "Numerical Python extensions" or "NumPy"), with influences from the APL family of languages, Basis, MATLAB, FORTRAN, S and S+, and others. Hugunin, a graduate student at the Massachusetts Institute of Technology (MIT), Numarray had faster operations for large arrays, but was slower than Numeric on small ones, so for a time both packages were used in parallel for different use cases. The last version of Numeric (v24.2) was released on 11 November 2005, while the last version of numarray (v1.5.2) was released on 24 August 2006. There was a desire to get Numeric into the Python standard library, but Guido van Rossum decided that the code was not maintainable in its state then.
Саны
2005 жылдың басында NumPy әзірлеушісі Трэвис Олифант қауымдастықты бір ғана массивтік пакеттің айналасына біріктіруді қалап, Numarray мүмкіндіктерін Numeric-ке көшірді және нәтижені 2006 жылы NumPy 1.0 ретінде жариялады. 2011 жылы PyPy, PyPy үшін NumPy API-дің іске асырылуын дамытуға кірісті. 2023 жылға дейін ол әлі толыққанды NumPy-мен үйлесімді емес.
In early 2005, NumPy developer Travis Oliphant wanted to unify the community around a single array package and ported Numarray's features to Numeric, releasing the result as NumPy 1.0 in 2006. In 2011, PyPy started development on an implementation of the NumPy API for PyPy. As of 2023, it is not yet fully compatible with NumPy.
Ерекшеліктері
NumPy Python-ның CPython анықтамалық нұсқасын қолдайды, ол оптимизацияланбаған байт-код интерпретаторы болып табылады. Python-ның осы нұсқасы үшін жазылған математикалық алгоритмдер компилятордың оптимизациясы болмағандықтан, компиляцияланған баламаларына қарағанда әлдеқайда баяу жұмыс істейді. NumPy баяулық мәселесін көп өлшемді массивтер, сондай-ақ массивтерде тиімді жұмыс істейтін функциялар мен операторларды ұсына отырып, ішінара шешеді. Бұларды пайдалану үшін кейбір кодты, әсіресе ішкі циклдарды NumPy арқылы қайта жазу қажет. NumPy-ді Python-да пайдалану MATLAB-қа ұқсас функционалдық мүмкіндіктерді береді, себебі екеуі де интерпретацияланады және екеуі де пайдаланушыға операциялардың көп бөлігі массивтермен немесе матрицалармен орындалса, жылдам бағдарламалар жазуға мүмкіндік береді. Қарама-қарсылығы, MATLAB Simulink сияқты көптеген қосымша құралдар жиынтығымен мақтана алады, ал NumPy Python-мен, көбірек қазіргі заманғы және толыққанды бағдарламалау тілімен тікелей байланысты. Сонымен қатар, толықтыратын Python пакеттері бар; SciPy – MATLAB сияқты функционалдық мүмкіндіктерді кеңейтетін кітапхана, ал Matplotlib – MATLAB сияқты график салу мүмкіндіктерін ұсынатын пакет. MATLAB сирек матрицалық операцияларды орындай алса да, NumPy жалғыз өзі мұндай операцияларды орындай алмайды және scipy.sparse кітапханасын пайдалануды қажет етеді. Ішкі жағынан, MATLAB және NumPy екеуі де тиімді сызықтық алгебра есептеулері үшін BLAS және LAPACK-қа сенеді. Көп қолданылатын компьютерлік көру кітапханасы OpenCV-нің Python байланыстары деректерді сақтау және оларды өңдеу үшін NumPy массивтерін пайдаланады. Көп арналы кескіндер үш өлшемді массивтер ретінде бейнеленгендіктен, индекстеу, бөліп алу немесе басқа массивтермен маскалау кескіннің нақты пиксельдеріне қол жеткізудің өте тиімді тәсілдері болып табылады. NumPy массиві OpenCV-дегі кескіндер, ізделген ерекшеліктер нүктелері, сүзгі ядролары және т.б. үшін әмбебап деректер құрылымы ретінде бағдарламалау процесін және қателерді жоюды ыңғайлы етеді. Маңыздысы, көптеген NumPy операциялары жаһандық интерпретаторды босатады, бұл көп жіпті өңдеуге мүмкіндік береді. NumPy сонымен қатар C API-ін ұсынады, ол Python кодына төменгі деңгейдегі тілдерде жазылған сыртқы кітапханалармен өзара әрекеттесуге мүмкіндік береді.
NumPy targets the CPython reference implementation of Python, which is a non optimizing bytecode interpreter. Mathematical algorithms written for this version of Python often run much slower than compiled equivalents due to the absence of compiler optimization. NumPy addresses the slowness problem partly by providing multidimensional arrays and functions and operators that operate efficiently on arrays; using these requires rewriting some code, mostly inner loops, using NumPy. Using NumPy in Python gives functionality comparable to MATLAB since they are both interpreted, and they both allow the user to write fast programs as long as most operations work on arrays or matrices instead of scalars. In comparison, MATLAB boasts a large number of additional toolboxes, notably Simulink, whereas NumPy is intrinsically integrated with Python, a more modern and complete programming language. Moreover, complementary Python packages are available; SciPy is a library that adds more MATLAB like functionality and Matplotlib is a plotting package that provides MATLAB like plotting functionality. Although matlab can perform sparse matrix operations, numpy alone cannot perform such operations and requires the use of the scipy. sparse library. Internally, both MATLAB and NumPy rely on BLAS and LAPACK for efficient linear algebra computations. Python bindings of the widely used computer vision library OpenCV utilize NumPy arrays to store and operate on data. Since images with multiple channels are simply represented as three dimensional arrays, indexing, slicing or masking with other arrays are very efficient ways to access specific pixels of an image. The NumPy array as universal data structure in OpenCV for images, extracted feature points, filter kernels and many more vastly simplifies the programming workflow and debugging. Importantly, many NumPy operations release the global interpreter lock, which allows for multithreaded processing. NumPy also provides a C API, which allows Python code to interoperate with external libraries written in low level languages.
Сызықтардың деректер құрылымы
NumPy-дің негізгі функционалдығы – оның n өлшемді массив үшін "ndarray" дерек құрылымы. Бұл массивтер жадқа тікелей қол жеткізуді қамтамасыз етеді. Python-ның кіріктірілген тізім дерек құрылымынан өзгеше, бұл массивтер біртекті типтелген: бір массивтің барлық элементтері бірдей типте болуы керек. Мұндай массивтер C/C++, Python және Fortran кеңейтімдері арқылы CPython интерпретаторына бөлінген жад буферлеріне сілтеме жасауға мүмкіндік береді, деректерді көшіру қажеттілігін жоққа шығарады және қолданыстағы сандық кітапханалармен үйлесімділікті қамтамасыз етеді. SciPy пакеті осы функционалдықты пайдаланады, ол BLAS және LAPACK сияқты көптеген кітапханаларды қамтиды. NumPy жадқа бейімделген массивтерді және Numba-ны қолдайды. Cython және Pythran – бұл статикалық компиляцияға баламалы құралдар. Көптеген қазіргі заманғы, кең ауқымды ғылыми есептеулерге арналған қолданбалардың талаптары NumPy массивтерінің мүмкіндіктерін асып түседі. Мысалы, NumPy массивтері әдетте компьютердің жадына жүктеледі, бұл үлкен деректер жиынтығын талдау үшін жеткіліксіз болуы мүмкін. Сонымен қатар, NumPy операциялары бір процессорда орындалады. Дегенмен, көптеген сызықтық алгебра операцияларын процессорлар кластерінде немесе GPU және TPU сияқты арнайы аппараттық құралдарда орындау арқылы үдетуге болады, олар көптеген терең оқыту қолданбаларында қолданылады. Осының нәтижесінде, соңғы жылдары ғылыми Python экожүйесінде Dask (бөлінген массивтер үшін) және TensorFlow немесе JAX (GPU-дағы есептеулер үшін) сияқты бірнеше балама массивтер пайда болды. Олардың танымалдылығының арқасында, олар көбінесе NumPy API-нің бір бөлігін іске асырады немесе оны имитациялайды, бұл пайдаланушыларға кодта минималды өзгерістер енгізу арқылы массивтің іске асырылуын өзгертуге мүмкіндік береді. Nvidia-ның CUDA фреймворкімен үдетілген және NumPy-дің "толыққанды алмастырушысы" болатын құрал, жылдам есептеулерге қабілетті екенін көрсетті.
The core functionality of NumPy is its "ndarray", for n dimensional array, data structure. These arrays are strided views on memory. In contrast to Python's built in list data structure, these arrays are homogeneously typed: all elements of a single array must be of the same type. Such arrays can also be views into memory buffers allocated by C/C++, Python, and Fortran extensions to the CPython interpreter without the need to copy data around, giving a degree of compatibility with existing numerical libraries. This functionality is exploited by the SciPy package, which wraps a number of such libraries (notably BLAS and LAPACK). NumPy has built in support for memory mapped ndarrays. and Numba. Cython and Pythran are static compiling alternatives to these. Many modern large scale scientific computing applications have requirements that exceed the capabilities of the NumPy arrays. For example, NumPy arrays are usually loaded into a computer's memory, which might have insufficient capacity for the analysis of large datasets. Further, NumPy operations are executed on a single CPU. However, many linear algebra operations can be accelerated by executing them on clusters of CPUs or of specialized hardware, such as GPUs and TPUs, which many deep learning applications rely on. As a result, several alternative array implementations have arisen in the scientific python ecosystem over the recent years, such as Dask for distributed arrays and TensorFlow or JAX for computations on GPUs. Because of its popularity, these often implement a subset of NumPy's API or mimic it, so that users can change their array implementation with minimal changes to their code required. accelerated by Nvidia's CUDA framework, has also shown potential for faster computing, being a 'drop in replacement' of NumPy.