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!
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 utilizandosp_sparse.csr_matrix()
:Esto generará la siguiente salida:
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.