9
votes

CSV à la matrice rare en python

J'ai un gros fichier CSV qui répertorie les connexions entre les nœuds dans un graphique. Exemple:

0001,95784
0001,98743
0002 00082
0002 00091

Cela signifie donc que le nœud ID 0001 est connecté au noeud 95784 et 98743 et ainsi de suite. J'ai besoin de lire ceci dans une matrice rare en numpy. Comment puis-je faire ceci? Je suis nouveau à Python afin que les tutoriels soient également utiles.


2 commentaires

Qu'entendez-vous par '0001 est connecté à 95784', dans les termes de la matrice que vous voulez avoir?


Par cela, je veux dire que le nœud (ID: 0001) a un lien dirigé vers le nœud (ID: 95784)


3 Réponses :


2
votes

Si vous voulez une matrice d'adjacence, vous pouvez faire quelque chose comme: xxx


0 commentaires

1
votes

Vous pouvez également être intéressé par NetworkX , un réseau de réseau python pur / graphique.

de Le site:

NetworkX est un package Python pour la création, la manipulation et l'étude de la structure, de la dynamique et des fonctions de réseaux complexes. xxx


0 commentaires

12
votes

Exemple Utilisation de lil_matrix (liste de la liste de liste Matrix ) de Scipy.

Matrice de liste liée à base de lignes.

Ceci contient une liste ( auto.aux ) des lignes, chacune d'une liste triée des indices de colonne d'éléments non nuls. Il contient également une liste ( self.data ) des listes de ces éléments. xxx

code: xxx

sortie: xxx


5 commentaires

Exactement ce dont j'avais besoin. Des bonnes ressources pour Scipy que vous pouvez recommander?


Une petite question. Les chiffres dans les CSV ne sont pas les indices. ils sont IDS, c'est-à-dire que le fichier commence par 0001001 930412 0001001,93111042 0001001,9404151 0001001,9404151 0001001 9407087 0001001 9408099 0001001 9508099 0001001 950103124 Comment puis-je convertir ces identifiants en indices numériques, le ID Server Le but de simplement identifier les nœuds, ils peuvent être remplacés par des indices équivalents s'ils sont uniques. Comment puis-je accomplir cela. Je sais que je peux simplement créer des lignes et des colonnes aussi gros que le plus grand identifiant, mais cela semble gaspillé que les nœuds comme les indices 0 - 1001 sont gaspillés.


Je comprends votre préoccupation et je suppose, il n'existe personne de «compresser» vos données aux éléments pertinents. Cela dépend en grande partie de votre objectif, ce que vous voulez faire avec les données plus tard. par exemple. Vous pouvez utiliser un «dictionnaire de mappage» qui mappe les identifiants réels sur des valeurs numériques plus petites ...


Si vous voulez "presser" vos indices afin qu'ils commencent à 0 et montent par incréments de 1 à un maximum, pourquoi pas (1) les trier produisant triés_ixs ( triés_ixs = ixs ; SORTED_IXS.SORT () ), (2) ZIP (TRIED_IXS, plage (LEN (TRIED_IXS)) Production d'une liste de paires correspondant à un index avec un "index pressé", (3 ) Utilisez la liste comme «Tableau de traduction» de l'ancien à de nouveaux indices.


En fait, cela triera également ixs , je pense; Utilisez trited_ixs = ixs [:] si vous souhaitez conserver votre ixs non formé autour.