построить матрицу, указав недиагональные блоки - PullRequest
0 голосов
/ 02 октября 2019

Мне нужно построить матрицу из списка матриц, которые задают недиагональные блоки, в идеале - разреженную матрицу.

Мне известно о 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 здесь помогает (и это не редкость).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...