numpy.block
-
numpy.block(arrays)[source] -
Составление nd-массива из вложенных списков блоков.
Блоки во вложенных списках конкатенируются (см.
concatenate) по последнему измерению (-1), затем эти блоки конкатенируются по предпоследнему измерению (-2) и так далее, пока не будет достигнут самый внешний список.Блоки могут иметь любое измерение, но не будут транслироваться по обычным правилам. Вместо этого к размерностям добавляются ведущие оси размера 1, чтобы
block.ndimбыло одинаковым для всех блоков. Это в первую очередь полезно для работы со скалярами и означает, что такой код, какnp.block([v, 1]), допустим, гдеv.ndim == 1.Когда вложенный список имеет глубину два уровня, это позволяет строить блочные матрицы из их компонентов.
New in version 1.13.0.
- Параметры
-
-
arraysnested list of array_like or scalars (but not tuples) -
Если передан единственный ndarray или скаляр (вложенный список глубиной 0), он возвращается без изменений (и не копируется).
Размеры элементов должны совпадать вдоль соответствующих осей (без трансляции), но ведущие единицы будут добавлены к размеру по мере необходимости, чтобы размеры совпали.
-
- Возвращает
-
-
block_arrayndarray -
Массив, собранный из заданных блоков.
Размерность выходного значения равна максимальной из: * размерности всех входных данных * глубины вложения входного списка
-
- Возбуждает
-
- ValueError
-
- Если глубины списков не совпадают - например,
[[a, b], c]некорректно, и следует использовать[[a, b], [c]] - Если списки пусты - например,
[[a, b], []]
- Если глубины списков не совпадают - например,
См. также
-
concatenate -
Объединить последовательность массивов вдоль существующей оси.
-
stack -
Объединить последовательность массивов вдоль новой оси.
-
vstack -
Укладывать массивы последовательно вертикально (по строкам).
-
hstack -
Укладывать массивы последовательно горизонтально (по столбцам).
-
dstack -
Укладывать массивы последовательно по глубине (вдоль третьей оси).
-
column_stack -
Уложить массивы 1-D в качестве столбцов в массив 2-D.
-
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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.block.html