NumPy-вещание

Numpy Vesanie



Массивы разного размера нельзя добавлять, вычитать или использовать в арифметике иным образом. Дублирование массива small, чтобы придать ему те же размеры и размер, что и массиву большего размера, является одним из подходов. При выполнении арифметических операций с массивами NumPy предлагает функцию, известную как широковещательная рассылка массивов, которая может значительно сократить и упростить ваш код. В этом руководстве вы узнаете об идее трансляции массива и о том, как ее использовать в NumPy. Кроме того, предоставляется несколько примеров программ.

Что такое вещание NumPy?

При выполнении арифметических операций над массивами разных форм NumPy называет это трансляцией. Эти операции с массивами часто выполняются над соответствующими элементами. Если два массива имеют одинаковую форму, это можно легко сделать на них. Несмотря на то, что эта концепция полезна, широковещательная рассылка не всегда рекомендуется, поскольку она может привести к неэффективному использованию памяти, что замедлит вычисления. Операции NumPy часто выполняются над парами массивов, которые разбиваются поэлементно.

Правила трансляции

При вещании необходимо соблюдать определенный набор правил. Они описаны ниже:







  1. Форма массива более низкого ранга должна начинаться с 1 до тех пор, пока обе формы массивов не будут иметь одинаковую длину, если два массива не имеют одинакового ранга.
  2. Два массива считаются совместимыми, если они имеют одинаковый размер измерения или если размер измерения одного из них равен 1.
  3. Массивы могут транслироваться только вместе, если их размеры и размеры совпадают.
  4. После завершения трансляции каждый массив действует так, как если бы его форма соответствовала форме самого большого элемента в формах двух входных массивов.
  5. Один из массивов ведет себя так, как если бы он был реплицирован с этим измерением, если размер другого массива больше 1, а размер первого массива равен 1.

Теперь давайте обсудим несколько примеров реализации концепции вещания.



Пример 1:

Для пар массивов операции NumPy обычно выполняются поэлементно. Два массива должны, в самом прямом сценарии, иметь одинаковую форму, как в примере ниже:



импорт пустышка

one_arr знак равно тупой. множество ( [ 2.0 , 3.0 , 1,0 ] )

two_arr знак равно тупой. множество ( [ 3.0 , 3.0 , 3.0 ] )

Распечатать ( one_arr * two_arr )





Как видно из кода выше, у нас есть два массива: one_arr и two_arr. Каждый из которых имеет отдельный набор значений. Значения в one_arr – [2.0,3.0,1.0], а в two _arr – [3.0,3.0,3.0]. Затем вы можете увидеть, что результат вычисления произведения этих двух массивов выглядит следующим образом:



Когда формы массивов удовлетворяют определенным требованиям, правило вещания NumPy снижает это ограничение. Когда массив и скалярное значение объединяются в операции, широковещательная передача демонстрируется в самой простой форме. Как видите, 3 содержится в переменной с именем «two_arr».

импорт пустышка

one_arr знак равно тупой. множество ( [ 2.0 , 3.0 , 1,0 ] )

two_arr знак равно 3.0

Распечатать ( one_arr * two_arr )

Приведенный выше код дает следующий результат.

В предыдущем примере, где two_arr был массивом, результат эквивалентен. Мы можем представить, как скаляр two_arr расширяется во время арифметического процесса в массив, имеющий ту же форму, что и one _arr. Массив two_arr содержит новые элементы, которые являются просто дубликатами первого скаляра. Сравнение растяжения является просто гипотетическим. Чтобы сделать широковещательные операции с использованием памяти и экономичными с точки зрения вычислений, NumPy достаточно умен, чтобы использовать исходное скалярное значение, а не создавать копии.

Пример 2:

Вот еще одна простая программа на Python, которая выполняет широковещательную рассылку. И снова создаются два массива, содержащие разные значения. Необходимо преобразовать «first_arr» в вектор-столбец с формой 3 × 1, чтобы вычислить внешний продукт. После этого выполняется широковещательная рассылка для «second_arr», чтобы предоставить результат размером 3 × 2, известный как внешнее произведение «first_arr» и «second_arr». ×3, а также форму (3,).

После выполнения всех вышеупомянутых шагов вектор должен быть включен в каждый столбец матриц, которые являются «result_arr» и «second_arr». Они имеют размеры 2 × 3 и (2, ). Транспонирование «result_arr» даст форму 3 × 2, которую затем можно транслировать против «second_arr», чтобы получить ту же форму. Как правило, при перестановке получается конечный продукт в форме 2×3.

импорт пустышка

first_arr знак равно тупой. множество ( [ 12 , 24 , 14 ] )

second_arr знак равно тупой. множество ( [ пятнадцать , 22 ] )

Распечатать ( тупой. изменить форму ( first_arr , ( 3 , 1 ) ) * second_arr )

результат_arr знак равно тупой. множество ( [ [ 12 , 22 , 31 ] , [ пятнадцать , 22 , Четыре пять ] ] )

Распечатать ( result_arr + first_arr )

Распечатать ( ( результат_обр. Т + second_arr ) . Т )

Распечатать ( результат_arr + numpy. изменить форму ( second_arr , ( два , 1 ) ) )

Распечатать ( результат_обр * два )

Вы можете просмотреть вывод ниже.

Пример 3:

Трехмерный массив можно транслировать с помощью следующей программы Python. В этом примере были сгенерированы два массива с именами «first_arr» и «second_arr». Массив «first_arr» содержит значения [4,13,26,12], а «second_arr» содержит значения [32,67,45,17]. Двумерность исходного массива имеет значение. Сумма первого и второго массивов будет показана ниже после выполнения кода. Вы можете видеть, что у нас есть три оператора печати в коде, каждый из которых отображает текст «Первый массив:», «Второй массив» и «Третий массив:» по очереди. Затем отображается сумма этих двух вновь сгенерированных массивов.

импорт пустышка

first_arr знак равно тупой. множество ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Четыре пять , 17 ] ] )

second_arr знак равно тупой. множество ( [ 24 , Четыре пять , 66 , 87 ] )

Распечатать ( ' \n Первый массив: ' )

Распечатать ( first_arr )

Распечатать ( ' \n Второй массив: ' )

Распечатать ( second_arr )

Распечатать ( ' \n Сумма первого и второго массива: ' )

сумма_результат знак равно first_arr + second_arr ;

Распечатать ( сумма_результат )

Вот выходной скриншот данного кода.

Пример 4:

Последняя программа Python, которая транслирует трехмерный массив, приведена здесь. В этой программе заданы два массива, первый из которых имеет три измерения. Сумма первого и второго массивов будет показана, как показано выше, после выполнения кода. Хотя значения в этих массивах различаются, оставшийся код такой же, как и в приведенном выше примере программы.

импорт пустышка

first_arr знак равно тупой. множество ( [ [ 12 , Четыре пять , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ 50 , 40 , 18 , 26 ] ] )

second_arr знак равно тупой. множество ( [ 12 , 44 , 22 , 12 ] )

Распечатать ( ' \n Первый массив: ' )

Распечатать ( first_arr )

Распечатать ( ' \n Второй массив: ' )

Распечатать ( second_arr )

Распечатать ( ' \n Сумма первого и второго массива: ' )

сумма_результат знак равно first_arr + second_arr ;

Распечатать ( сумма_результат )

Вы можете видеть на рисунке ниже, что представлен трехмерный массив из первого массива, за которым следует двумерный массив из второго массива и результат этих двух, использующих принцип вещания.

Вывод

В этой статье обсуждалась широковещательная передача, важнейшая концепция Python. В NumPy термин «трансляция» относится к способности обрабатывать массивы различной формы при выполнении часто выполняемых арифметических операций. Вышеупомянутая тема была тщательно освещена множеством примеров. В этой статье упомянутые примеры программ использовались для демонстрации того, как осуществлять широковещательную передачу на одномерных, двухмерных и трехмерных массивах соответственно. Вы можете попробовать запустить эти примеры в своей системе и просмотреть результаты, чтобы лучше понять, как все работает в целом.