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