Dans Numpy, ix_() est utilisé pour saisir des lignes et des colonnes d'une matrice, mais il ne semble pas fonctionner avec des matrices creuses. ce code fonctionne, par exemple, car il utilise une matrice dense:Dans SciPy, l'utilisation de ix_() avec des matrices creuses ne semble pas fonctionner alors quoi d'autre puis-je utiliser?
>>> import numpy as np
>>> x = np.mat([[1,0,3],[0,4,5],[7,8,0]])
>>> print x
[[1 0 3]
[0 4 5]
[7 8 0]]
>>> print x[np.ix_([0,2],[0,2])]
[[1 3]
[7 0]]
je ix_() pour indexer les éléments correspondant à la 0e et 2e lignes et colonnes qui donne aux 4 coins de la matrice.
Le problème est que ix_ ne semble pas fonctionner avec des matrices creuses. Continuant à partir du code précédent, je effectuez les opérations suivantes:
>>> import scipy.sparse as sparse
>>> xspar = sparse.csr_matrix(x)
>>> print xspar
(0, 0) 1
(0, 2) 3
(1, 1) 4
(1, 2) 5
(2, 0) 7
(2, 1) 8
>>> print xspar[np.ix_([0,2],[0,2])]
et obtenez un énorme message d'erreur disant qu'il ya cette exception:
File "C:\Python26\lib\site-packages\scipy\sparse\compressed.py", line 138, in check_format
raise ValueError('data, indices, and indptr should be rank 1')
ValueError: data, indices, and indptr should be rank 1
J'ai essayé avec les autres formats de matrice clairsemés fournies par SciPy , mais aucun d'entre eux ne semble fonctionner avec ix_(), bien qu'ils n'élèvent pas tous la même exception. L'exemple que j'ai donné utilisait une matrice qui n'était pas très grande ou très clairsemée, mais celles avec lesquelles je travaille sont assez éparses et potentiellement très grandes, il ne semble donc pas prudent d'énumérer les éléments un. Est-ce que quelqu'un connaît une façon (si possible facile) de faire ce genre d'indexation avec des matrices creuses dans SciPy ou cette fonctionnalité n'est-elle pas intégrée dans ces matrices éparses?
fonctionne comme un charme, merci! Bien qu'il semble fonctionner pour les matrices csc et csr, mais pas pour les matrices, cela me suffit. –
De rien! –
Il est dommage que la syntaxe éparse pour le découpage soit légèrement différente de la syntaxe dense. 'xspar [[[0], [2]], [0,2]]' vs 'xdense [[[0], [2]], [[0,2]]]' – gabe