복붙노트

[PYTHON] 파이썬에서 매트릭스를 희소하게하는 csv

PYTHON

파이썬에서 매트릭스를 희소하게하는 csv

그래프의 노드 간 연결을 나열하는 커다란 csv 파일이 있습니다. 예:

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

즉 노드 ID 0001은 노드 95784와 98743에 연결되어 있습니다. 나는 이것을 numpy의 드문 드문 행렬로 읽어야한다. 내가 어떻게 할 수 있니? 파이썬에 익숙하지 않기 때문에 이것에 대한 자습서도 도움이 될 것입니다.

해결법

  1. ==============================

    1.scipy의 lil_matrix (리스트 행렬의리스트)를 사용한 예제.

    scipy의 lil_matrix (리스트 행렬의리스트)를 사용한 예제.

    $ 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] []]
    
  2. ==============================

    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
    
  3. ==============================

    3.순수 파이썬 네트워크 / 그래프 패키지 인 Networkx에도 관심이 있습니다.

    순수 파이썬 네트워크 / 그래프 패키지 인 Networkx에도 관심이 있습니다.

    웹 사이트에서 :

    >>> 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)]
    
  4. from https://stackoverflow.com/questions/1938894/csv-to-sparse-matrix-in-python by cc-by-sa and MIT license