Spec-Zone.ru › NumPy 1.20

numpy.block

numpy.block(arrays) [source]

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

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

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

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

Новое в версии 1.13.0.

Параметры
arraysnested list of array_like or scalars (but not tuples)

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

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

Возвращает
block_arrayndarray

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

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

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

См. также

concatenate

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

stack

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

vstack

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

hstack

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

dstack

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

column_stack

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

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([2, 3, 4])
>>> np.block([a, b, 10])             # hstack([a, b, 10])
array([ 1,  2,  3,  2,  3,  4, 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([2, 3, 4])
>>> np.block([[a], [b]])             # vstack([a, b])
array([[1, 2, 3],
       [2, 3, 4]])
>>> 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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.block.html

Spec-Zone.ru

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