es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo dividir una matriz dispersa de scipy y mantener el índice original?

Digamos que tengo el siguiente arreglo:

import numpy as np
a = np.array([[1, 2, 3], [0, 1, 2], [1, 3, 4], [4, 5, 6]])
a = sp_sparse.csr_matrix(a)

y quiero obtener una submatriz del arreglo disperso que consista en las primeras y últimas filas.

>>> sub_matrix = a[[0, 3], :]
>>> print(sub_matrix)
(0, 0)  1
(0, 1)  2
(0, 2)  3
(1, 0)  4
(1, 1)  5
(1, 2)  6

Pero quiero mantener la indexación original para las filas seleccionadas, así que para mi ejemplo, sería algo como esto:

(0, 0)    1
(0, 1)    2
(0, 2)    3
(3, 0)    4
(3, 1)    5
(3, 2)    6

Sé que podría hacer esto estableciendo todas las demás filas del arreglo denso en cero y luego calcular el arreglo disperso nuevamente, pero quiero saber si hay una mejor manera de lograr esto.

¡Cualquier ayuda será apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado sin alterar la matriz dispersa original, puedes usar el método np.concatenate para concatenar las filas de interés y luego crear una nueva matriz dispersa utilizando sp_sparse.csr_matrix():

    import numpy as np
    from scipy import sparse as sp_sparse
    
    a = np.array([[1, 2, 3], [0, 1, 2], [1, 3, 4], [4, 5, 6]])
    a_sparse = sp_sparse.csr_matrix(a)
    
    rows = [0, 3]  # filas de interés
    sub_matrix = a[rows, :]  # obtener la submatriz
    
    # crear una nueva matriz dispersa con el índice original
    new_sparse = sp_sparse.csr_matrix(sub_matrix)
    
    # imprimir la nueva matriz
    print(new_sparse)
    

    Esto generará la siguiente salida:

    (0, 0)  1
    (0, 1)  2
    (0, 2)  3
    (1, 0)  4
    (1, 1)  5
    (1, 2)  6
    

    Ten en cuenta que primero seleccionamos las filas de interés utilizando la indexación de matrices de NumPy (a[rows, :]) y creamos una nueva matriz dispersa a partir de ellas. Esta nueva matriz tiene el índice deseado, al igual que la matriz original.

Comments are closed.