РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
51 of 541 menu

Функция broadcast_arrays

Функция broadcast_arrays принимает несколько массивов и приводит их к форме, которая позволяет выполнять над ними элементные операции без явного копирования данных. В результате возвращается кортеж массивов с одинаковой формой. При необходимости функция расширяет оси со значением размера 1 до требуемой размерности.

Синтаксис

np.broadcast_arrays(*args, subok=False)

Параметр *args принимает массивы для приведения. Параметр subok (по умолчанию False) определяет, будут ли возвращаться подклассы ndarray.

Пример

Давайте приведем одномерный и двумерный массивы к общей форме:

import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([[10], [20], [30]]) res1, res2 = np.broadcast_arrays(arr1, arr2) print("arr1:", res1) print("arr2:", res2)

Результат выполнения кода:

arr1: [[1 2 3] [1 2 3] [1 2 3]] arr2: [[10 10 10] [20 20 20] [30 30 30]]

Пример

Давайте сравним результат с явным широковещанием через прибавление константы:

import numpy as np a = np.array([[1], [2], [3]]) b = np.array([10, 20, 30]) broadcasted_a, broadcasted_b = np.broadcast_arrays(a, b) print("Shape of a:", a.shape) print("Shape of b:", b.shape) print("Broadcasted a shape:", broadcasted_a.shape) print("Broadcasted b shape:", broadcasted_b.shape)

Результат выполнения кода:

Shape of a: (3, 1) Shape of b: (3,) Broadcasted a shape: (3, 3) Broadcasted b shape: (3, 3)

Как видим, оба массива получили форму (3, 3), что позволяет выполнять операции поэлементно.

Пример

Давайте приведем три массива разной размерности к общей форме:

import numpy as np x = np.array([1, 2]) y = np.array([[10], [20]]) z = np.array([[[100]], [[200]]]) res_x, res_y, res_z = np.broadcast_arrays(x, y, z) print("x shape:", res_x.shape) print("y shape:", res_y.shape) print("z shape:", res_z.shape)

Результат выполнения кода:

x shape: (2, 2, 2) y shape: (2, 2, 2) z shape: (2, 2, 2)

Все три массива приведены к единой форме (2, 2, 2), хотя изначально их размерности различались.

Пример

Давайте используем функцию в сочетании с поэлементной операцией:

import numpy as np a = np.array([1, 2, 3, 4]) b = np.array([[5], [6], [7], [8]]) bc_a, bc_b = np.broadcast_arrays(a, b) res = bc_a + bc_b print(res)

Результат выполнения кода:

[[ 6 7 8 9] [ 7 8 9 10] [ 8 9 10 11] [ 9 10 11 12]]

Поэлементное сложение работает корректно после приведения обоих массивов к форме (4, 4).

Смотрите также

  • функцию broadcast_to,
    которая приводит один массив к заданной форме для широковещания
  • функцию expand_dims,
    которая добавляет новую ось в массив
  • функцию atleast_2d,
    которая приводит массивы к как минимум двумерной форме
  • функцию atleast_3d,
    которая приводит массивы к как минимум трехмерной форме
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить