Подойдет ли следующее для ваших целей?
import numpy as np
import numba as nb
@nb.njit
def _bmat_2d(m):
out = np.hstack(m[0])
for row in m[1:]:
x = np.hstack(row)
out = np.vstack((out, x))
return out
A = np.random.randint(10, size=(3,2))
B = np.random.randint(10, size=(3,1))
C = np.random.randint(10, size=(3,3))
D = np.random.randint(10, size=(4,6))
a = np.bmat(((A, B, C), (D,)))
b = _bmat_2d(((A, B, C), (D,)))
print(np.allclose((a, b)) # True
Обратите внимание, что вы должны передать кортеж кортежей, а не список списков, иначе вы получите "отражение"list "ошибка, поскольку Numba в текущей версии не может обрабатывать списки списков.