2016-01-26 1 views
2

J'ai un sframe comme:sframe dans csr_matrix scipy.sparse

x = sf.SFrame({'users': [{'123': 1.0, '122': 5}, 
{'134': 3.0, '123': 10}]}) 

Je veux convertir en csr_matrix scipy.sparse sans invoquer graphlab créer, mais seulement en utilisant sframe et Python.

Comment le faire?

Répondre

0

En supposant que vous voulez que le numéro de ligne soit l'index de ligne dans la matrice de sortie clairsemée, la seule étape délicate consiste à utiliser SFrame.stack - à partir de là, vous devriez pouvoir directement construire csr_matrix.

import sframe as sf 
from scipy.sparse import csr_matrix 

x = sf.SFrame({'users': [{'123': 1.0, '122': 5}, 
         {'134': 3.0, '123': 10}]}) 
x = x.add_row_number('row_id') 
x = x.stack('users') 
A = csr_matrix((x['X3'], (x['row_id'], x['X2'])), 
       shape=(2, 135)) 

Je suis aussi coder en dur la dimension de la matrice, mais c'est probablement quelque chose que vous voulez comprendre programmtically.

+0

Merci. C'était utile. Mais, j'ai toujours un problème. J'ai un user_len = 1444418322. Mais, ce qui suit ne fonctionne pas sur python sur le serveur ubuntu. df_csr = csr_matrix ((df_temp ['Total'], (df_temp ['ClusterId'], df_temp ['UserId'])), forme = (100, users_len + 1)) Mais cela a fonctionné sur un cluster redhat C3. Je pense que cela peut avoir à faire avec le paramètre 64 pour python ou une version incorrecte des bibliothèques comme sklearn. S'il vous plaît aviser. – dvshekar