CSV для разреженной матрицы в Python

У меня есть большой CSV-файл, в котором перечислены соединения между узлами в графе. пример:

0001,95784
0001,98743
0002,00082
0002,00091

Таким образом, это означает, что идентификатор узла 0001 связан с узлами 95784 и 98743 и так далее. Мне нужно прочитать это в разреженной матрице в NumPy. Как я могу это сделать? Я новичок в Python, так что учебники по этому также помогут.

3 ответа

Решение

Пример использования lil_matrix (список матрицы списка) scipy.

Матрица связанного списка на основе строк.

Это содержит список (self.rows) строк, каждая из которых представляет собой отсортированный список индексов столбцов ненулевых элементов. Он также содержит список (self.data) списков этих элементов.

$ cat 1938894-simplified.csv
0,32
1,21
1,23
1,32
2,23
2,53
2,82
3,82
4,46
5,75
7,86
8,28

Код:

#!/usr/bin/env python

import csv
from scipy import sparse

rows, columns = 10, 100
matrix = sparse.lil_matrix( (rows, columns) )

csvreader = csv.reader(open('1938894-simplified.csv'))
for line in csvreader:
    row, column = map(int, line)
    matrix.data[row].append(column)

print matrix.data

Выход:

[[32] [21, 23, 32] [23, 53, 82] [82] [46] [75] [] [86] [28] []]

Вы также можете быть заинтересованы в Networkx, сетевом графическом пакете Python.

С веб-сайта:

NetworkX - это пакет Python для создания, управления и изучения структуры, динамики и функций сложных сетей.

>>> import networkx as nx
>>> G=nx.Graph()
>>> G.add_edge(1,2)
>>> G.add_node("spam")
>>> print G.nodes()
[1, 2, 'spam']
>>> print G.edges()
[(1, 2)]

Если вы хотите матрицу смежности, вы можете сделать что-то вроде:

from scipy.sparse import *
from scipy import *
from numpy import *
import csv
S = dok_matrix((10000,10000), dtype=bool)
f = open("your_file_name")
reader = csv.reader(f)
for line in reader:
    S[int(line[0]),int(line[1])] = True
Другие вопросы по тегам