Програмування масивів — засіб в інформатиці, що дозволяє застосовувати операції до всього набору значень одночасно. Зазвичай використовується в наукових та інженерних задачах.
Сучасні мови програмування, які підтримують програмування масивів (також відомі як векторні або багато-вимірні мови), розробили спеціально для узагальнення операцій над скалярами для прозорого застосування до векторів, матриць і масивів вищої розмірності.
До них належать APL, J, Fortran, MATLAB, , Octave, R, Cilk Plus, Julia, . У цих мовах операцію, яка працює над цілими масивами, можна назвати векторизованою операцією, незалежно від того, чи виконується вона на векторному процесорі, який реалізує векторні інструкції.
Операції програмування масивів стисло виражають ідеї щодо маніпулювання даними. Рівень стислості може бути вражаючим: можна знайти такі однорядкові програми, які вимагають кількох сторінок об'єктно-орієнтованого коду з циклами.
Втілення
Програмування масивів дуже добре підходить для Intel і сумісні ЦП, розроблені та вироблені після 1997 року, містили різні розширення набору інструкцій, починаючи від MMX і закінчуючи SSSE3 і 3DNow!, які містять базові операції SIMD. В 2020-х роках з'явився AVX-512, що перетворило сучасні ЦП на векторні процесори.
. Крім того,Програмування масивів відрізняється від паралельної обробки тим, що один фізичний процесор виконує операції над групою елементів одночасно, тоді як паралельна обробка має на меті розділити більшу проблему на менші (MIMD), які вирішуються по частинах багатьма процесорами.
На 2023 рік процесори з кількома ядрами та графічні процесори з тисячами загальних обчислювальних ядер поширені на персональних комп'ютерах.
Мови
- Ada
A := A + B;
- APL
A ← A + B
- MATLAB
A = A + B;
Ділення матриць і синтаксис
Оператор лівого ділення квадратної матриці використовується для розв'язку СЛАР A * x = b
, помноживши обидві частини зліва на обернену до A
:
A^-1 *(A * x) == A^-1 * (b)
(A^-1 * A)* x == A^-1 * b
x = A^-1 * b
де ==
— оператор рівності.
Для довільних матриць псевдообернення A+
(у мовах MATLAB і GNU Octave: pinv(A)
) використовується аналогічно:
pinv(A) *(A * x) == pinv(A) * (b)
(pinv(A) * A)* x == pinv(A) * b
x = pinv(A) * b
Проте ці рішення не є ані лаконічнішими, ані ефективнішими з точки зору обчислень. Бо виконуються дві операції (обернення та множення), замість однієї (ділення зліва). Оскільки множення матриць не комутативне, MATLAB вводить оператор лівого ділення \
, щоби підтримувати аналогії зі скалярним випадком, таким чином спрощуючи математичне міркування та зберігаючи стислість:
A \ (A * x)==A \ b
(A \ A)* x ==A \ b
(множення є асоціативним, комутативність більше не потрібна)x = A \ b
Це приклад не лише стислого запису, але й ефективнішого обчислення, який реалізований в бібліотеках LAPACK.
таБібліотеки
Використання спеціалізованих і ефективних бібліотек для стисліших абстракцій також поширене в інших мовах програмування.
- У декілька бібліотек лінійної алгебри використовують здатність мови перевантажувати оператори (Eigen, та ).
- Дуже стислу абстракцію програмування масивів для мови Python забезпечує бібліотека NumPy.
Примітки
- Stéfan van der Walt; S. Chris Colbert & Gaël Varoquaux (2011). The NumPy array: a structure for efficient numerical computation. Computing in Science and Engineering (англ.). IEEE. 13 (2): 22—30. arXiv:1102.1523. Bibcode:2011CSE....13b..22V. doi:10.1109/mcse.2011.37. S2CID 16907816.
- Ada Reference Manual: G.3.1 Real Vectors and Matrices (англ.)
- GNU Octave Manual. Appendix G Installing Octave (англ.). Процитовано 19 березня 2011.
- Reference for Armadillo 1.1.8. Examples of Matlab/Octave syntax and conceptually corresponding Armadillo syntax (англ.). Процитовано 19 березня 2011.
- (англ.). Архів оригіналу за 23 березня 2011. Процитовано 19 березня 2011.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Programuvannya masiviv zasib v informatici sho dozvolyaye zastosovuvati operaciyi do vsogo naboru znachen odnochasno Zazvichaj vikoristovuyetsya v naukovih ta inzhenernih zadachah Suchasni movi programuvannya yaki pidtrimuyut programuvannya masiviv takozh vidomi yak vektorni abo bagato vimirni movi rozrobili specialno dlya uzagalnennya operacij nad skalyarami dlya prozorogo zastosuvannya do vektoriv matric i masiviv vishoyi rozmirnosti Do nih nalezhat APL J Fortran MATLAB inshi movi Octave R Cilk Plus Julia inshi movi U cih movah operaciyu yaka pracyuye nad cilimi masivami mozhna nazvati vektorizovanoyu operaciyeyu nezalezhno vid togo chi vikonuyetsya vona na vektornomu procesori yakij realizuye vektorni instrukciyi Operaciyi programuvannya masiviv stislo virazhayut ideyi shodo manipulyuvannya danimi Riven stislosti mozhe buti vrazhayuchim mozhna znajti taki odnoryadkovi programi yaki vimagayut kilkoh storinok ob yektno oriyentovanogo kodu z ciklami VtilennyaProgramuvannya masiviv duzhe dobre pidhodit dlya inshi movi Krim togo Intel i sumisni CP rozrobleni ta virobleni pislya 1997 roku mistili rizni rozshirennya naboru instrukcij pochinayuchi vid MMX i zakinchuyuchi SSSE3 i 3DNow yaki mistyat bazovi operaciyi SIMD V 2020 h rokah z yavivsya AVX 512 sho peretvorilo suchasni CP na vektorni procesori Programuvannya masiviv vidriznyayetsya vid paralelnoyi obrobki tim sho odin fizichnij procesor vikonuye operaciyi nad grupoyu elementiv odnochasno todi yak paralelna obrobka maye na meti rozdiliti bilshu problemu na menshi MIMD yaki virishuyutsya po chastinah bagatma procesorami Na 2023 rik procesori z kilkoma yadrami ta grafichni procesori z tisyachami zagalnih obchislyuvalnih yader poshireni na personalnih komp yuterah MoviAda A A B APL A A B MATLAB A A B Dilennya matric i sintaksisOperator livogo dilennya kvadratnoyi matrici vikoristovuyetsya dlya rozv yazku SLAR A x b pomnozhivshi obidvi chastini zliva na obernenu do A A 1 A x A 1 b A 1 A x A 1 b x A 1 b de operator rivnosti Dlya dovilnih matric psevdoobernennya A sup sup u movah MATLAB i GNU Octave pinv A vikoristovuyetsya analogichno pinv A A x pinv A b pinv A A x pinv A b x pinv A b Prote ci rishennya ne ye ani lakonichnishimi ani efektivnishimi z tochki zoru obchislen Bo vikonuyutsya dvi operaciyi obernennya ta mnozhennya zamist odniyeyi dilennya zliva Oskilki mnozhennya matric ne komutativne MATLAB vvodit operator livogo dilennya shobi pidtrimuvati analogiyi zi skalyarnim vipadkom takim chinom sproshuyuchi matematichne mirkuvannya ta zberigayuchi stislist A A x A b A A x A b mnozhennya ye asociativnim komutativnist bilshe ne potribna x A b Ce priklad ne lishe stislogo zapisu ale j efektivnishogo obchislennya yakij realizovanij v bibliotekah inshi movi ta LAPACK BibliotekiVikoristannya specializovanih i efektivnih bibliotek dlya stislishih abstrakcij takozh poshirene v inshih movah programuvannya U C dekilka bibliotek linijnoyi algebri vikoristovuyut zdatnist movi perevantazhuvati operatori Eigen inshi movi ta inshi movi Duzhe stislu abstrakciyu programuvannya masiviv dlya movi Python zabezpechuye biblioteka NumPy PrimitkiStefan van der Walt S Chris Colbert amp Gael Varoquaux 2011 The NumPy array a structure for efficient numerical computation Computing in Science and Engineering angl IEEE 13 2 22 30 arXiv 1102 1523 Bibcode 2011CSE 13b 22V doi 10 1109 mcse 2011 37 S2CID 16907816 Ada Reference Manual G 3 1 Real Vectors and Matrices angl GNU Octave Manual Appendix G Installing Octave angl Procitovano 19 bereznya 2011 Reference for Armadillo 1 1 8 Examples of Matlab Octave syntax and conceptually corresponding Armadillo syntax angl Procitovano 19 bereznya 2011 angl Arhiv originalu za 23 bereznya 2011 Procitovano 19 bereznya 2011