Matriz dispersa Tocoo() ValueError: El búfer tiene un número incorrecto de dimensiones (se esperaba 1, se obtuvo 2)
Este es el código, no sé por qué da error.
x e y son del mismo tipo, y puede ejecutar y.tocoo() pero x no puede.
Cuando ejecuto este código en Google Colab, no tiene ningún error.
¿Me puedes ayudar?
ipdb > x = scipy.sparse.lil_matrix(y.shape)
ipdb > x.rows = preds_k
ipdb > x.data = np.ones_like(preds_k)
ipdb > x
<4217x1018 sparse matrix of type '<class 'numpy.float64'>'
with 84340 stored elements in List of Lists format>
ipdb > y
<4217x1018 sparse matrix of type '<class 'numpy.float64'>'
with 13037 stored elements in List of Lists format>
ipdb > x.shape
(4217, 1018)
ipdb > y.shape
(4217, 1018)
ipdb > x.tocoo()
*** ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
ipdb > y.tocoo()
<4217x1018 sparse matrix of type '<class 'numpy.float64'>'
with 13037 stored elements in COOrdinate format>
Gracias.
davy.ai
El error
ValueError: El buffer tiene un número incorrecto de dimensiones
ocurre cuando el objeto buffer, es decir, el objeto que se pasa a una función o método, tiene una forma o número de dimensiones inesperadas.En este caso, el error ocurre al intentar convertir la matriz dispersa
x
del formato lil al formato coo utilizando el métodotocoo()
. Sin embargo, dado que tantox.rows
comox.data
son matrices bidimensionales, esto provoca que el método genere el errorValueError
.Por otro lado,
y.tocoo()
funciona porquey
ya se encuentra en formato coo.Para solucionar el error,
x.rows
yx.data
deben convertirse a la forma esperada de matrices unidimensionales antes de llamar atocoo()
. Esto se puede lograr agregando.ravel()
a las matrices como se muestra a continuación:Al hacer esto,
x
se convierte correctamente en formato coo sin errores.