Програмування масивів — засіб в інформатиці, що дозволяє застосовувати операції до всього набору значень одночасно. Зазвичай використовується в наукових та інженерних задачах.
Сучасні мови програмування, які підтримують програмування масивів (також відомі як векторні або багато-вимірні мови), розробили спеціально для узагальнення операцій над скалярами для прозорого застосування до векторів, матриць і масивів вищої розмірності.
До них належать APL, J, Fortran, MATLAB, , Octave, R, Cilk Plus, Julia, . У цих мовах операцію, яка працює над цілими масивами, можна назвати векторизованою операцією, незалежно від того, чи виконується вона на векторному процесорі, який реалізує векторні інструкції.
Операції програмування масивів стисло виражають ідеї щодо маніпулювання даними. Рівень стислості може бути вражаючим: можна знайти такі однорядкові програми, які вимагають кількох сторінок об'єктно-орієнтованого коду з циклами.
Втілення Програмування масивів дуже добре підходить для . Крім того, Intel і сумісні ЦП, розроблені та вироблені після 1997 року, містили різні розширення набору інструкцій, починаючи від MMX і закінчуючи SSSE3 і 3DNow!, які містять базові операції SIMD. В 2020-х роках з'явився AVX-512, що перетворило сучасні ЦП на векторні процесори.
Програмування масивів відрізняється від паралельної обробки тим, що один фізичний процесор виконує операції над групою елементів одночасно, тоді як паралельна обробка має на меті розділити більшу проблему на менші (MIMD), які вирішуються по частинах багатьма процесорами.
На 2023 рік процесори з кількома ядрами та графічні процесори з тисячами загальних обчислювальних ядер поширені на персональних комп'ютерах.
Мови AdaAda Reference Manual: G.3.1 Real Vectors and Matrices 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)) використовується аналогічно:
Проте ці рішення не є ані лаконічнішими, ані ефективнішими з точки зору обчислень. Бо виконуються дві операції (обернення та множення), замість однієї (ділення зліва). Оскільки множення матриць не комутативне, MATLAB вводить оператор лівого ділення \, щоби підтримувати аналогії зі скалярним випадком, таким чином спрощуючи математичне міркування та зберігаючи стислість: A \ (A * x)==A \ b (A \ A)* x ==A \ b (множення є асоціативним, комутативність більше не потрібна) x = A \ b Це приклад не лише стислого запису, але й ефективнішого обчислення, який реалізований в бібліотеках та LAPACK.
Бібліотеки Використання спеціалізованих і ефективних бібліотек для стисліших абстракцій також поширене в інших мовах програмування. У C++ декілька бібліотек лінійної алгебри використовують здатність мови перевантажувати оператори (Eigen, та ). Дуже стислу абстракцію програмування масивів для мови Python забезпечує бібліотека NumPy.
Примітки