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