2013-10-08 3 views
0

J'ai posé cette question ici: How to convert occurence matrix to co-occurence matrixComment convertir matrice occurence à la matrice Cooccurrence en Python

Je réalise que mes données est si grand qu'il ne soit pas possible de le faire en utilisant R. Mon ordinateur se bloque. Les données réelles sont un fichier texte avec ~ 5 millions de lignes et 600 colonnes. Je pense que Python peut être une option alternative pour le faire.

+0

Quelle est votre question? – geoffspear

+0

Pourquoi posez-vous à nouveau la même question si vous l'avez déjà posée dans cette autre question? – BrenBarn

+0

@BrenBarn: l'autre question concerne l'implémentation dans R. Cette question concerne l'implémentation en Python. –

Répondre

0

Ce serait la façon dont vous traduisez le code R en code Python.

>>> import numpy as np 
>>> a=np.array([[0, 1, 0, 0, 1, 1], 
      [0, 0, 1, 1, 0, 1], 
      [1, 1, 1, 1, 0, 0], 
      [1, 1, 1, 0, 1, 1]]) 
>>> acov=np.dot(a.T, a) 
>>> acov[np.diag_indices_from(acov)]=0 
>>> acov 
array([[0, 2, 2, 1, 1, 1], 
     [2, 0, 2, 1, 2, 2], 
     [2, 2, 0, 2, 1, 2], 
     [1, 1, 2, 0, 0, 1], 
     [1, 2, 1, 0, 0, 2], 
     [1, 2, 2, 1, 2, 0]]) 

Cependant, vous avez un très grand ensemble de données. Si vous ne voulez pas assembler la matrice de cooccurrence pièce par pièce et que vous stockez vos valeurs dans int64, avec des nombres 3e + 9, il vous faudra 24 Go de RAM seulement pour contenir les données http://www.wolframalpha.com/input/?i=3e9+ * + 8 + octets. Donc, vous voulez probablement réfléchir et décider quel dtype vous voulez stocker vos données dans: http://docs.scipy.org/doc/numpy/user/basics.types.html. L'utilisation de int16 rendra probablement le fonctionnement du produit dot possible sur un PC de bureau décent de nos jours.

+2

envisager de convertir en matrices creuses (['scipy.sparse'] (http://docs.scipy.org/doc/scipy/reference/sparse.html)) –