numpy.block

numpy.block([a1, a2, ..., aN])

Функция block() создает массив из указанной последовательности блоков. Сама последовательность блоков может содержать несколько уровней вложенности. Блоки во вложенных последовательностях соединяются вдоль последнего измерения (ось с индексом [-1]), затем они объединяются вдоль предпоследнего измерения (ось с индексом [-2]) и так далее, пока не будет достигнут самый верхний уровень вложенности.

Блоки могут быть любой размерности, но при этом они не будут транслироваться относительно друг друга. Вместо транслирования к блокам добавляются новые оси длинной 1, что бы сделать их размерность одинаковой.

Параметры:
[a1, a2, ..., aN] - список (не кортежи) подобных массиву объектов или скаляров
Если в качестве этого параметра передан всего один массив NumPy или один скаляр, то функция возвращает его как есть, без копирования. Формы блоков должны совпадать по соответствующим объединению осям (без транслирования), так как в случае необходимости, единичные оси будут добавлены автоматически, что бы согласовать размерность блоков. В случае неверного указания глубины списка, например, [[x,y],z] вместо [[x,y],[z]], или пустых списков [[x,y],[]], то будет возбуждено исключение ValueError
Возвращает:
ndarray - массив NumPy
Массив собранный из указанных блоков. Размерность результирующего массива равна произведению наибольшей из размерностей всех входных блоков на глубину вложенности последовательности блоков.
Смотрите так же: broadcast_arrays, array, stack, repeat

Замечание

Если в качестве параметров функции block указаны только скаляры, то это эквивалентно функции np.array с теми же самыми параметрами:

>>> np.block([1,2,3])
array([1, 2, 3])
>>>
>>> np.array([1,2,3])
array([1, 2, 3])


Примеры

>>> import numpy as np
>>> 
>>> a = np.array([0, 0])
>>> b = np.array([1, 1])
>>> c = np.array([2, 2, 2])
>>> d = np.array([3, 3, 3])
>>> 
>>> np.block([[a, b], [b, a]])
array([[0, 0, 1, 1],
       [1, 1, 0, 0]])
>>> 
>>> np.block([[[a], [b]], [[b], [a]]])
array([[[0, 0],
        [1, 1]],

       [[1, 1],
        [0, 0]]])
>>> 
>>> np.block([a, c[0:2]])
array([0, 0, 2, 2])
>>>
>>> np.block([[a, c], [b, d]])
array([[0, 0, 2, 2, 2],
       [1, 1, 3, 3, 3]])
>>> 
>>> np.block([[a, a], [a, b], [b, a], [b, b]])
array([[0, 0, 0, 0],
       [0, 0, 1, 1],
       [1, 1, 0, 0],
       [1, 1, 1, 1]])
>>> 
>>> np.block([[[c, a], [d, a], [c, b], [d, b]]])
array([[[2, 2, 2, 0, 0],
        [3, 3, 3, 0, 0],
        [2, 2, 2, 1, 1],
        [3, 3, 3, 1, 1]]])
>>>
>>>
>>> #  Указание параметров в списке с 1, 2 и 3 уровнями вложенности 
... #  эквивалентно функциям np.atleast_1d, np.atleast_2d, np.atleast_3d
... a = 0
>>> b = np.array([1])
>>> 
>>> np.block([a])    #  эквивалентно np.atleast_1d
array([0])
>>> np.block([b])
array([1])
>>> 
>>> np.block([[a]])    #  эквивалентно np.atleast_2d
array([[0]])
>>> np.block([[b]])
array([[1]])
>>>
>>>
>>> #  Список глубины 1 эквивалентен функции np.hstack
... a = np.array([0, 0])
>>> b = np.array([2, 2])
>>> 
>>> np.block([a, b])
array([0, 0, 2, 2])
>>> 
>>> np.block([a, b, 77])
array([ 0,  0,  2,  2, 77])
>>> 
>>> np.block([a, b, a, b])
array([0, 0, 2, 2, 0, 0, 2, 2])
>>> 
>>> a = [0, 0]
>>> b = [2, 2]
>>> 
>>> np.block([a, b])
array([[0, 0],
       [2, 2]])
>>> a = np.array([[0, 0], [1, 1]])
>>> b = np.array([[2, 2], [3, 3]])
>>> 
>>> np.block([a, b])
array([[0, 0, 2, 2],
       [1, 1, 3, 3]])
>>>
>>> c = np.array([[1], [1]])
>>>
>>> np.block([a,b,c])
array([[0, 0, 2, 2, 1],
       [1, 1, 3, 3, 1]])
>>> 
>>> 
>>> #  Если в качестве параметров указаны списки
... #  то это добавляет еще один уровень вложенности
... #  к указанной последовательности
... a = [0, 0]
>>> b = [2, 2]
>>> 
>>> np.block([a, b])    #  уже не эквивалентно np.hstack
array([[0, 0],
       [2, 2]])
>>> 
>>> 
>>> #  Список глубины 2 эквивалентен функции np.vstack
... a = np.array([0, 0])
>>> b = np.array([2, 2])
>>> 
>>> np.block([[a], [b]])
array([[0, 0],
       [2, 2]])
>>> 
>>> a = np.array([[0, 0], [1, 1]])
>>> b = np.array([[2, 2], [3, 3]])
>>> 
>>> np.block([[a], [b]])
array([[0, 0],
       [1, 1],
       [2, 2],
       [3, 3]])