Existe um algoritmo para reorganizar uma matriz na forma diagonal de bloco, dado que a matriz é de natureza diagonal de bloco, mas randomizada com uma escolha imprudente de base?
Em particular, existem módulos python para isso?
Existe um algoritmo para reorganizar uma matriz na forma diagonal de bloco, dado que a matriz é de natureza diagonal de bloco, mas randomizada com uma escolha imprudente de base?
Em particular, existem módulos python para isso?
Respostas:
A matriz é esparsa ou densa? Simétrico?
O fato de sua matriz ter diagonal de bloco (até uma reordenação) significa que o gráfico não está conectado e descobrir quais vértices devem estar juntos em um bloco equivale a encontrar os componentes conectados do gráfico. Você pode fazer isso com uma pesquisa abrangente . Como a ordem inversa Cuthill-McKee de uma matriz é essencialmente uma pesquisa abrangente , provavelmente você pode encontrar o código Python de alguém para a ordem RCM e usá-lo diretamente ou modificá-lo para seus propósitos.
Toda matriz é diagonal de bloco em uma sábia escolha de base - isso é chamado de forma normal de Jordan , e a base é composta de seus autovetores generalizados. Se a matriz é simétrica, essa base é composta de vetores próprios, e você pode calculá-la usando, por exemplo, o algoritmo QR . O SciPy fornece o módulo linalg.qr
para calcular as decomposições QR necessárias. Caso contrário, você pode usar a decomposição de valor singular , que pode ser calculada usando linalg.svd
.