Spec-Zone.ru › NumPy 1.21

numpy.block

numpy.block(arrays)[source]

Составление nd-массива из вложенных списков блоков.

Блоки во внутреннем списке конкатенируются (см. concatenate) вдоль последнего измерения (-1), затем эти блоки конкатенируются вдоль предпоследнего измерения (-2) и так далее до достижения внешнего списка.

Блоки могут быть любой размерности, но не будут транслироваться по обычным правилам. Вместо этого к начальным осям размера 1 добавляются дополнительные оси, чтобы сделать размерности всех блоков одинаковыми. Это в первую очередь полезно для работы со скалярами и означает, что такой код, как np.block([v, 1]), допустим, где v.ndim == 1.

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

Добавлена в версии 1.13.0.

Параметры
arraysвложенный список array_like или скаляров (но не кортежей)

Если передан единственный ndarray или скаляр (вложенный список глубины 0), он возвращается без изменений (и не копируется).

Форматы элементов должны совпадать вдоль соответствующих осей (без трансляции), но ведущие 1 будут добавлены в форму, если необходимо, чтобы размерности совпадали.

Возвращает
block_arrayndarray

Массив, собранный из заданных блоков.

Размерность выходного массива равна максимальной из: * размерности всех входов * глубины вложенности входного списка

Возбуждает
ValueError
  • Если глубины списков не совпадают - например, [[a, b], c] является недопустимым и должно быть записано как [[a, b], [c]]
  • Если списки пусты - например, [[a, b], []]

См. также

concatenate

Объединить последовательность массивов вдоль существующей оси.

stack

Объединить последовательность массивов вдоль новой оси.

vstack

Укладка массивов в последовательности по вертикали (строчно).

hstack

Укладка массивов в последовательности по горизонтали (по столбцам).

dstack

Укладка массивов в последовательности в глубину (по третьей оси).

column_stack

Укладка 1-мерных массивов в столбцы в 2-мерный массив.

vsplit

Разделение массива на несколько подмассивов по вертикали (по строкам).

Примечания

При вызове только со скалярами, np.block эквивалентно вызову ndarray. Таким образом, np.block([[1, 2], [3, 4]]) эквивалентно np.array([[1, 2], [3, 4]]).

Эта функция не накладывает ограничений на то, что блоки лежат на фиксированной сетке. np.block([[a, b], [c, d]]) не ограничена массивами вида:

AAAbb
AAAbb
cccDD

Но также может создавать для некоторых a, b, c, d:

AAAbb
AAAbb
cDDDD

Так как конкатенация происходит сначала вдоль последней оси, block _не_ способна напрямую произвести следующее:

AAAbb
cccbb
cccDD

«Сложение в квадратных скобках» в Matlab, [A, B, ...; p, q, ...], эквивалентно np.block([[A, B, ...], [p, q, ...]]).

Примеры

Наиболее распространенное использование этой функции — построение блочной матрицы

>>> A = np.eye(2) * 2
>>> B = np.eye(3) * 3
>>> np.block([
...     [A,               np.zeros((2, 3))],
...     [np.ones((3, 2)), B               ]
... ])
array([[2., 0., 0., 0., 0.],
       [0., 2., 0., 0., 0.],
       [1., 1., 3., 0., 0.],
       [1., 1., 0., 3., 0.],
       [1., 1., 0., 0., 3.]])

С списком глубиной 1, block может использоваться как hstack

>>> np.block([1, 2, 3])              # hstack([1, 2, 3])
array([1, 2, 3])
>>> a = np.array([1, 2, 3])
>>> b = np.array([4, 5, 6])
>>> np.block([a, b, 10])             # hstack([a, b, 10])
array([ 1,  2,  3,  4,  5,  6, 10])
>>> A = np.ones((2, 2), int)
>>> B = 2 * A
>>> np.block([A, B])                 # hstack([A, B])
array([[1, 1, 2, 2],
       [1, 1, 2, 2]])

С списком глубиной 2, block может использоваться вместо vstack:

>>> a = np.array([1, 2, 3])
>>> b = np.array([4, 5, 6])
>>> np.block([[a], [b]])             # vstack([a, b])
array([[1, 2, 3],
       [4, 5, 6]])
>>> A = np.ones((2, 2), int)
>>> B = 2 * A
>>> np.block([[A], [B]])             # vstack([A, B])
array([[1, 1],
       [1, 1],
       [2, 2],
       [2, 2]])

Также она может использоваться вместо atleast_1d и atleast_2d

>>> a = np.array(0)
>>> b = np.array([1])
>>> np.block([a])                    # atleast_1d(a)
array([0])
>>> np.block([b])                    # atleast_1d(b)
array([1])
>>> np.block([[a]])                  # atleast_2d(a)
array([[0]])
>>> np.block([[b]])                  # atleast_2d(b)
array([[1]])

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.block.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API