Дополнение 4-мерной матрицы

У меня есть 4-мерная матрица размера n × n × n × n заполненная числами. Мне надо дополнить её нулями до размера m × m × m × m. Подскажите, пожалуйста, короткий способ это сделать без использования библиотек.
Пример исходной матрицы размера 2 × 2 × 2 × 2
a = [[[[0, 1], [0, 0]], [[6, 0], [0, 0]]], [[[0, 0], [8, 3]], [[0, 0], [0, 9]]]]


Ответы (1 шт):

Автор решения: SergFSM

Любопытная оказалась задачка. Конечно, с numpy было бы куда проще, а так пришлось поломать голову. Получился такой, довольно неказистый код, но вроде работает:

def ext(matr, m):
    ''' matr - исходная матрица (list),
        m - необходимый размер (int)
    '''
    def dims(x,m,d):
        if d:
            if len(x) < m:
                if d>1: x+=[[] for _ in range(m-len(x))]
                else: x+=[0] * (m-len(x))
            for i in x: dims(i,m,d-1)  # рекурсивно проходим все вложенные списки
        return x

    f = lambda x: 0 if not x or type(x)!=list else 1 + f(x[0])  # определяем измерения исходной матрицы
    return dims(matr,m,f(matr))

a = [[[[0, 1], [0, 0]], [[6, 0], [0, 0]]], [[[0, 0], [8, 3]], [[0, 0], [0, 9]]]]
ext(a, 3)  # расширяем матрицу 2х2х2х2 до размера 3х3х3х3

результат:

[[[[0, 1, 0], [0, 0, 0], [0, 0, 0]],
  [[6, 0, 0], [0, 0, 0], [0, 0, 0]],
  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]],
 [[[0, 0, 0], [8, 3, 0], [0, 0, 0]],
  [[0, 0, 0], [0, 9, 0], [0, 0, 0]],
  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]],
 [[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
  [[0, 0, 0], [0, 0, 0], [0, 0, 0]],
  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]]
→ Ссылка