Вітаю! Я продовжую роботу над посібником по python-бібліотеці NumPy.
У минулій частині ми навчилися створювати масиви і їх друкувати. Однак це не має сенсу, якщо з ними нічого не можна робити.
Сьогодні ми познайомимося з операціями над масивами.
базові операції
Математичні операції над масивами виконуються поелементно. Створюється новий масив, який заповнюється результатами дії оператора.
Для цього, природно, масиви повинні бути однакових розмірів.
Також можна робити математичні операції між масивом і числом. В цьому випадку до кожного елементу додається (або що ви там робите) це число.
NumPy також надає безліч математичних операцій для обробки масивів:
Повний список можна подивитися тут.
Багато унарні операції, такі як, наприклад, обчислення суми всіх елементів масиву, представлені також і у вигляді методів класу ndarray.
За замовчуванням, ці операції застосовуються до масиву, як якщо б він був списком чисел, незалежно від його форми. Однак, вказавши параметр axis, можна застосувати операцію для зазначеної осі масиву:
Індекси, зрізи, ітерації
Одномірні масиви здійснюють операції індексування, зрізів і ітерацій дуже схожим чином з звичайними списками і іншими послідовностями Python (хіба що видаляти за допомогою зрізів можна).
У багатовимірних масивів на кожну вісь припадає один індекс. Індекси передаються у вигляді послідовності чисел, розділених комами (чи то пак, кортежами):
Коли індексів менше, ніж осей, відсутні індекси передбачаються доповненими за допомогою зрізів:
Наприклад, якщо x має ранг 5 (тобто у нього 5 осей), тоді
- x [1, 2.] еквівалентно x [1, 2.],
- x [. 3] те ж саме, що x [. 3] і
- x [4. 5.] це x [4. 5.].
Ітерірованіе багатовимірних масивів починається з першої осі:
Однак, якщо потрібно перебрати поелементно весь масив, як якщо б він був одновимірним, для цього можна використовувати атрибут flat:
Маніпуляції з формою
Як вже говорилося, у масиву є форма (shape), яка визначається числом елементів вздовж кожної осі:
Форма масиву може бути змінена за допомогою різних команд:
Порядок елементів у масиві в результаті функції ravel () відповідає звичайному "C-стилю", тобто, чим правіше індекс, тим він "швидше змінюється": за елементом a [0,0] слід a [0,1]. Якщо одна форма масиву була змінена на іншу, масив переформовувалися також в "C-стилі". Функції ravel () і reshape () також можуть працювати (при використанні додаткового аргументу) в FORTRAN-стилі, в якому швидше змінюється більш лівий індекс.
Метод reshape () повертає її аргумент зі зміненою формою, в той час як метод resize () змінює сам масив:
Якщо при операції такої перебудови один з аргументів задається як -1, то він автоматично розраховується відповідно до іншими заданими:
об'єднання масивів
Кілька масивів можуть бути об'єднані разом уздовж різних осей за допомогою функцій hstack і vstack.
hstack () об'єднує масиви за першими осях, vstack () - за останніми:
Функція column_stack () об'єднує одномірні масиви як стовпців двовимірного масиву:
Аналогічно для рядків є функція row_stack ().
розбиття масиву
Використовуючи hsplit () ви можете розбити масив вздовж горизонтальної осі, вказавши або число повертаються масивів однакової форми, або номера стовпців, після яких масив розрізається "ножицями":
Функція vsplit () розбиває масив вздовж вертикальної осі, а array_split () дозволяє вказати осі, уздовж яких відбудеться розбиття.
Копії та подання
При роботі з масивами, їх дані іноді необхідно копіювати в інший масив, а іноді немає. Це часто є джерелом плутанини. Можливо 3 випадки:
Взагалі ніяких копій
Просте присвоювання не створює ні копії масиву, ні копії його даних:
Python передає змінювані об'єкти як посилання, тому виклики функцій також не створюють копій.
Подання або поверхнева копія
Різні об'єкти масивів можуть використовувати одні і ті ж дані. Метод view () створює новий об'єкт масиву, що є поданням тих же даних.
Зріз масиву це уявлення: