Как правильно присваивать значения в 2D-массиве?

#python #graph #data-mining

#python #График #интеллектуальный анализ данных

Вопрос:

Я пытаюсь назначить одну горячую кодировку для каждого подмножества узлов на графике. Ниже приведен код, который я пытаюсь

 import networkx as nx
import numpy as np
graph=nx.karate_club_graph()
nodes=list(graph.nodes())
n=graph.number_of_nodes()
subset_nodes=[1,2]

for v in subset_nodes:
    y=nodes.index(v)
    prob_vec=np.zeros((n,n))
    prob_vec[0][y]=1
    print(prob_vec)
  

Я получаю этот результат

 [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. 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.]]

I expect a matrix, with the subset nodes rows contains one hot encoding(1 value for each node in the subset node and others being zeros) like below:
[0. 1. 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.]]
  

Любая помощь будет высоко оценена

Комментарии:

1. В первой строке также должны быть нули, поскольку это строка для узла 0, которого нет в подмножестве узлов

Ответ №1:

Если я понимаю, что вы пытаетесь сделать, я думаю, вам нужно немного скорректировать свой код. В настоящее время вы печатаете каждый цикл и сбрасываете значение prob_vec на 0 для каждого цикла. Я думаю, вы хотите сделать что-то более похожее на это:

 import networkx as nx
import numpy as np
graph=nx.karate_club_graph()
nodes=list(graph.nodes())
n=graph.number_of_nodes()
subset_nodes=[1,2]

prob_vec=np.zeros((n,n))
for v in range(n):
  y = nodes.index(v)
  if y in subset_nodes:
    prob_vec[v][y]=1

print(prob_vec)
  

Это выводит:

 [[0. 0. 0. ... 0. 0. 0.]
 [0. 1. 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.]]