Spec-Zone.ru › NumPy 1.17

numpy.block

numpy.block(arrays) [source]

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

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

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

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

Введено в версии 1.13.0.

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

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

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

Возвращает:
block_array : ndarray

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

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

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

См. также

concatenate
Объединить последовательность массивов.
stack
Упаковать массивы в последовательности вдоль нового измерения.
hstack
Упаковать массивы в последовательности по горизонтали (по столбцам).
vstack
Упаковать массивы в последовательности по вертикали (по строкам).
dstack
Упаковать массивы в последовательности по глубине (по третьему измерению).
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.]])

При одном уровне вложенности списка 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]])

При двух уровнях вложенности списка 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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/generated/numpy.block.html

Spec-Zone.ru

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