Для непосредственного построения скудной разреженной матрицы необходимо сопоставить буквы по уникальным индексам, например, A == 1
, B == 2
и т. Д.
In [202]: txt='''A B
...:
...: C D
...:
...: A C
...:
...: D F
...:
...: G H
...:
...: K M
...:
...: M A'''.splitlines()
In [203]: values = 'ABCDEFGHIJKLM'
In [204]: data = [x.split() for x in txt if x]
In [205]: data = [[values.index(x) for x in row] for row in data]
In [206]: data
Out[206]: [[0, 1], [2, 3], [0, 2], [3, 5], [6, 7], [10, 12], [12, 0]]
Так что теперь у нас есть пары координат. Существуют различные способы построения разреженной матрицы из них. Пожалуй, самое простое концептуально сделать это итеративно с матрицей формата lil
(лучший формат для итеративного построения):
In [207]: from scipy import sparse
In [208]: M = sparse.lil_matrix((len(values),len(values)),dtype=int)
In [209]: for row in data:
...: M[tuple(row)] = 1
...:
In [210]: M
Out[210]:
<13x13 sparse matrix of type '<class 'numpy.int64'>'
with 7 stored elements in LInked List format>
In [211]: M.A
Out[211]:
array([[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])