微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在2D数组中正确分配值?

如何解决如何在2D数组中正确分配值?

我正在尝试为图中的节点的每个子集分配一个热编码。 下面是我正在尝试的代码

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

任何帮助将不胜感激

解决方法

如果我了解您要执行的操作,我认为您需要稍微调整一下代码。您当前正在打印每个循环,并将每个循环的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.]]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。