당신은 np.unique
를 사용하여 인덱스로 노드를 변환 할 수 있습니다
>>> adj_matrix = np.zeros((len(node_names),)*2)
>>> adj_matrix[adj_idx[:, 0], adj_idx[:, 1]] = 1
>>> adj_matrix
array([[ 0., 1., 1., 0.],
[ 1., 0., 1., 0.],
[ 1., 1., 0., 1.],
[ 0., 0., 0., 0.]])
또는 스파 스 형식 :이에서
>>> adj = [('b', 'c'),
... ('b', 'a'),
... ('c', 'd'),
... ('c', 'a'),
... ('c', 'b'),
... ('a', 'b'),
... ('a', 'c')]
>>> node_names, adj_idx = np.unique(adj, return_inverse=True)
>>> node_names
array(['a', 'b', 'c', 'd'],
dtype='|S1')
>>> adj_idx = adj_idx.reshape(-1, 2)
>>> adj_idx
array([[1, 2],
[1, 0],
[2, 3],
[2, 0],
[2, 1],
[0, 1],
[0, 2]])
, 당신이 당신의 밀도가 인접 행렬을 구성 할 수 있습니다로
>>> sps_adj_mat = sps.coo_matrix((np.ones(shape=(len(adj_idx),)),
... (adj_idx[:, 0], adj_idx[:, 1])),
... shape=(len(node_names),)*2)
>>> sps_adj_mat
<4x4 sparse matrix of type '<type 'numpy.float64'>'
with 7 stored elements in COOrdinate format>
>>> sps_adj_mat.A
array([[ 0., 1., 1., 0.],
[ 1., 0., 1., 0.],
[ 1., 1., 0., 1.],
[ 0., 0., 0., 0.]])
정말 대단합니다. 필자는 networkx를 사용하기 위해 목록을'scipy.sparse' 또는 numpy 행렬로 변환해야한다고 생각했다. 내가 그렇게하지 않으면 놀랄 것입니다. 그러나 나는 또한 이것을'R dataframe'으로 쉽게 옮길 수있는 것으로 변환하기를 원하므로 R을 사용할 수도 있습니다. 한 돌 종류의 두 마리. –