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