J'ai une grande matrice csr éparse (79 000 x 480 000). J'essaie de supprimer toutes les colonnes (dans un certain intervalle) pour lesquelles chaque valeur < k.
Dans les matrices numpy ordinaires, cela se fait simplement par un masque :
m = np.array([[0,2,1,1],
[0,4,2,0],
[0,3,4,0]])
mask = (arr < 2)
idx = mask.all(axis=0)
result = m[:, ~idx]
print result
>>> [[2 1]
[4 2]
[3 4]]
L'opérateur unaire de négation bit à bit ~ et la fonctionnalité de masque booléen ne sont toutefois pas disponibles pour les matrices peu denses. Quelle est la meilleure méthode pour :
- Obtenir les indices des colonnes dont toutes les valeurs remplissent la condition e < k.
- Supprimer ces colonnes en fonction de la liste des indices.
Quelques points à noter :
- Les colonnes représentent les caractéristiques des textes ngrammes : il n'y a pas de colonnes dans la matrice dont chaque élément est égal à zéro.
L'utilisation du format matriciel csr est-elle un choix plausible pour cela ? Est-ce que je transpose et utilise .nonzero() ? Je dispose d'une bonne quantité de mémoire de travail (192 Go), de sorte que l'efficacité en termes de temps est préférable à l'efficacité en termes de mémoire.