Трансляція
Перш ніж розглядати математичні операції в NumPy, важливо зрозуміти ключове поняття — трансляція (broadcasting).
Трансляція — це спосіб узгодження форм масивів для виконання арифметичних операцій без необхідності ручного зміни їх розмірності. По суті, трансляція автоматично підлаштовує форми масивів.
Коли NumPy працює з двома масивами, він перевіряє їхні форми на сумісність, щоб визначити, чи можна їх транслювати разом.
Якщо два масиви вже мають однакову форму, трансляція (broadcasting) не потрібна.
Однакова кількість вимірів
Припустимо, у нас є два масиви, для яких потрібно виконати додавання, з такими формами: (2, 3) та (1, 3). NumPy порівнює форми двох масивів, починаючи з крайнього правого виміру і рухаючись ліворуч. Тобто спочатку порівнюються 3 і 3, потім 2 і 1.
Два виміри вважаються сумісними, якщо вони рівні або якщо один з них дорівнює 1:
- Для вимірів 3 і 3 вони сумісні, оскільки вони рівні;
- Для вимірів 2 і 1 вони сумісні, оскільки один з них дорівнює 1.
Оскільки всі виміри сумісні, форми вважаються сумісними. Тому масиви можуть бути транслювані, що призводить до стандартної операції додавання між матрицями однакової форми, яка виконується елементно.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 створюється як двовимірний масив, що містить лише один рядок, тому його форма — (1, 3).
Але що станеться, якщо створити його як одновимірний масив із формою (3,)?
Різна кількість вимірів
Коли один масив має менше вимірів, ніж інший, відсутні виміри розглядаються як такі, що мають розмір 1. Наприклад, розглянемо два масиви з формами (2, 3) та (3,). Тут 3 = 3, а відсутній лівий вимір вважається рівним 1, тому форма (3,) перетворюється на (1, 3). Оскільки форми (2, 3) та (1, 3) сумісні, ці два масиви можна транслювати.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Трансляція скалярів
Окрім математичних операцій з масивами, можна виконувати аналогічні операції між масивом і скаляром (числом) завдяки трансляції. У цьому випадку масив може мати будь-яку форму, оскільки скаляр фактично не має форми, і всі його виміри вважаються рівними 1. Тому форми завжди сумісні.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Несумісні форми
Розглянемо також приклад несумісних форм, коли арифметичну операцію виконати неможливо, оскільки трансляція (broadcasting) неможлива:
Маємо масив розміром 2x3 та одновимірний масив довжини 2, тобто форму (2,). Відсутній вимір вважається 1, тому форми стають (2, 3) та (1, 2).
Рухаючись зліва направо: 3 != 2, отже, одразу отримуємо несумісні розміри, а отже — несумісні форми. Якщо спробувати виконати цей код, виникне помилка:
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain more about how broadcasting works with higher-dimensional arrays?
What kind of error message do you get when shapes are incompatible?
Can you give more real-world examples where broadcasting is useful?
Awesome!
Completion rate improved to 3.7
Трансляція
Свайпніть щоб показати меню
Перш ніж розглядати математичні операції в NumPy, важливо зрозуміти ключове поняття — трансляція (broadcasting).
Трансляція — це спосіб узгодження форм масивів для виконання арифметичних операцій без необхідності ручного зміни їх розмірності. По суті, трансляція автоматично підлаштовує форми масивів.
Коли NumPy працює з двома масивами, він перевіряє їхні форми на сумісність, щоб визначити, чи можна їх транслювати разом.
Якщо два масиви вже мають однакову форму, трансляція (broadcasting) не потрібна.
Однакова кількість вимірів
Припустимо, у нас є два масиви, для яких потрібно виконати додавання, з такими формами: (2, 3) та (1, 3). NumPy порівнює форми двох масивів, починаючи з крайнього правого виміру і рухаючись ліворуч. Тобто спочатку порівнюються 3 і 3, потім 2 і 1.
Два виміри вважаються сумісними, якщо вони рівні або якщо один з них дорівнює 1:
- Для вимірів 3 і 3 вони сумісні, оскільки вони рівні;
- Для вимірів 2 і 1 вони сумісні, оскільки один з них дорівнює 1.
Оскільки всі виміри сумісні, форми вважаються сумісними. Тому масиви можуть бути транслювані, що призводить до стандартної операції додавання між матрицями однакової форми, яка виконується елементно.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 створюється як двовимірний масив, що містить лише один рядок, тому його форма — (1, 3).
Але що станеться, якщо створити його як одновимірний масив із формою (3,)?
Різна кількість вимірів
Коли один масив має менше вимірів, ніж інший, відсутні виміри розглядаються як такі, що мають розмір 1. Наприклад, розглянемо два масиви з формами (2, 3) та (3,). Тут 3 = 3, а відсутній лівий вимір вважається рівним 1, тому форма (3,) перетворюється на (1, 3). Оскільки форми (2, 3) та (1, 3) сумісні, ці два масиви можна транслювати.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Трансляція скалярів
Окрім математичних операцій з масивами, можна виконувати аналогічні операції між масивом і скаляром (числом) завдяки трансляції. У цьому випадку масив може мати будь-яку форму, оскільки скаляр фактично не має форми, і всі його виміри вважаються рівними 1. Тому форми завжди сумісні.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Несумісні форми
Розглянемо також приклад несумісних форм, коли арифметичну операцію виконати неможливо, оскільки трансляція (broadcasting) неможлива:
Маємо масив розміром 2x3 та одновимірний масив довжини 2, тобто форму (2,). Відсутній вимір вважається 1, тому форми стають (2, 3) та (1, 2).
Рухаючись зліва направо: 3 != 2, отже, одразу отримуємо несумісні розміри, а отже — несумісні форми. Якщо спробувати виконати цей код, виникне помилка:
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Дякуємо за ваш відгук!