创建表示网络中连接的Numpy数组

时间:2015-01-21 16:41:19

标签: python arrays numpy

假设我有一个数组描述节点之间的网络链接:

array([[ 1.,  2.],
       [ 2.,  3.],
       [ 3.,  4.]])

这将是一个线性4节点网络,其中包含从节点1到节点2的链接等等。

将此信息转换为以下格式的数组的最佳方法是什么?

array([[ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.]])

列号表示“到节点”,行表示“从节点”。

另一个例子是:

array([[ 1.,  2.],
       [ 2.,  3.],
       [ 2.,  4.]]) 

array([[ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  1.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

1 个答案:

答案 0 :(得分:3)

节点ID应该是整数。 numpy中的行和列从零开始编号,因此我们必须在每个维度中减去一个:

import numpy as np

conns = np.array([[ 1,  2],
                  [ 2,  3],
                  [ 3,  4]])
net = np.zeros((conns.max(), conns.max()), dtype=int)

# two possibilities:

# if you need the number of connections:
for conn in conns:
    net[conn[0]-1, conn[1]-1] += 1

# if you just need a 1 for existing connection(s):
net[conns[:,0]-1, conns[:,1]-1] = 1