Мне нужно построить матрицу из списка матриц, которые задают недиагональные блоки, в идеале - разреженную матрицу.
Мне известно о bmat
, но для этого нужно знать, сколько матрицесть. Я хотел бы знать, есть ли эквивалент scipy.sparse.block_diag(list_of_mats,-1)
?
Функция должна иметь возможность обрабатывать неквадратные матрицы (в противном случае я мог бы просто дополнить вывод из block_diag(list_of_mats)
). Например, входные данные ([[1,2]], [[3]])
должны возвращать [[0,0,0,0],[0,0,0,0],[1,2,0,0],[0,0,3,0]]
.
Например, в Mathematica я мог бы указать матрицу матриц и использовать ArrayFlatten
.
Комментарийуточнение Да, len(list_of_mats)
действительно дает количество матриц, но тогда мне пришлось бы динамически построить [[None, ..., None], [A1, None, ...], [None, A2, None, ...], ...]
, чтобы применить к нему bmat
, и я не знаю, как это сделать (A1
и т. д.)являются элементами list_of_mats
). Это также отвечает на другой вопрос. Отображение работает путем записи сначала матрицы (из матриц) с list_of_mats
на (скажем) сначала вне диагонали, а затем сглаживает ее, чтобы сделать ее нормальной матрицей. В отличие от диагональной матрицы блоков, матрицы в списке не обязательно должны быть квадратными, чтобы это работало, что я и хотел проиллюстрировать на своем примере. Я думаю, что эта карта уникальна. Я не думаю, что numpy.tri здесь помогает (и это не редкость).