Resolver una matriz scipy.sparse subdeterminada usando svd

Problem

Tengo un conjunto de ecuaciones con variables denotadas con variables en minúsculas y constantes con mayúsculas como tales

A = a + b  
B = c + d  
C = a + b + c + d + e  

Se me proporciona la información sobre la estructura de estas ecuaciones en un DataFrame de pandas con dos columnas: Constantes y Variables

P.ej

df = pd.DataFrame([['A','a'],['A','b'],['B','c'],['B','d'],['C','a'],['C','b'], 
['C','c'],['C','d'],['C','e']],columns=['Constants','Variables'])

Luego lo convierto en una matriz CSC dispersa utilizando NetworkX

table = nx.bipartite.biadjacency_matrix(nx.from_pandas_dataframe(df,'Constants','Variables')  
,df.Constants.unique(),df.Variables.unique(),format='csc')

Cuando se convierte en una matriz densa,mes se parece a la siguiente

matrix ([[1, 1, 0, 0, 0], [0, 0, 1, 1, 0], [1, 1, 1, 1, 1]], dtype = int64)

o que quiero de aquí es encontrar qué variables son solucionables (en este ejemplo, soloe es solucionable) y para cada variable solucionable, de qué constantes depende su valor (en este caso, ya quee = C-B-A, depende deA, B yC)

Intentos en la solución

Primero intenté usar rref para resolver las variables solucionables. Utilicé la biblioteca de símbolos sympy y la función sympy.Matrix.rref, que me dio exactamente lo que quería, ya que cualquier variable solucionable tendría su propia fila con casi todos ceros y 1 uno, que podría comprobar fila por fila.

Sin embargo, esta solución no era estable. Principalmente, fue extremadamente lento y no hizo uso del hecho de que mis conjuntos de datos probablemente sean muy escasos. Además, rref no funciona muy bien con puntos flotantes. Así que decidí pasar a otro enfoque motivado porEliminación de ecuaciones insolubles de un sistema subdeterminado, que sugirió usar svd

Convenientemente, hay una función svd en la biblioteca scipy.sparse, a saber, scipy.sparse.linalg.svds. Sin embargo, dada mi falta de antecedentes de álgebra lineal, no entiendo los resultados generados al ejecutar esta función en mi tabla, o cómo usar esos resultados para obtener lo que quiero.

Más detalles en el problema El coeficiente de cada variable en mi problema es 1. Así es como se pueden expresar los datos en los dos pandas DataFrame de pandas mostrados anteriormente La gran mayoría de las variables en mis ejemplos reales no serán solucionables. El objetivo es encontrar los pocos que tienen solución Estoy más que dispuesto a probar un enfoque alternativo si se ajusta a las limitaciones de este problema.

Esta es la primera vez que publico una pregunta, así que me disculpo si esto no sigue exactamente las pautas. ¡Por favor, deje una crítica constructiva pero sea gentil!

Respuestas a la pregunta(2)

Su respuesta a la pregunta