提问人:Mirk 提问时间:6/14/2023 最后编辑:Mirk 更新时间:6/14/2023 访问量:26
获取平方网格的邻接矩阵
Get the adjacency matrix for a Squared Grid
问:
在网格 LxL 中,L 是元素数 N () 的平方根,我想获得所有彼此靠近的点的邻接矩阵,包括对角线。L=numpy.sqrt(N)
我已经创建了一个算法,但我认为不是最快的,所以我想问你如何解决这个问题。
这是我的解决方案
def get_2D_proximity(sqr_nblocks):
ncol = sqr_nblocks
nblocks = sqr_nblocks**2
adj_mtx = np.zeros([nblocks, nblocks])
for cell in range(ncol**2):
## right
if (cell+1) % ncol == 0:
pass
else:
adj_mtx[cell, cell+1] = 1
## down
if cell >= ncol*(ncol-1):
pass
else:
adj_mtx[cell, cell+ncol] = 1
## right-down diagonal
if ((cell+1) % ncol == 0) | (cell >= ncol*(ncol-1)):
pass
else:
adj_mtx[cell, cell+1+ncol] = 1
## left-down diagonal
if ((cell) % ncol == 0) | (cell >= ncol*(ncol-1)):
pass
else:
adj_mtx[cell, cell-1+ncol] = 1
upper_triangle_idx = np.triu_indices(adj_mtx.shape[0], k=1)
adj_mtx.T[upper_triangle_idx] = adj_mtx[upper_triangle_idx]
return adj_mtx
print(get_2D_proximity(3))
#### OUTPUT ####
array([[0., 1., 0., 1., 1., 0., 0., 0., 0.],
[1., 0., 1., 1., 1., 1., 0., 0., 0.],
[0., 1., 0., 0., 1., 1., 0., 0., 0.],
[1., 1., 0., 0., 1., 0., 1., 1., 0.],
[1., 1., 1., 1., 0., 1., 1., 1., 1.],
[0., 1., 1., 0., 1., 0., 0., 1., 1.],
[0., 0., 0., 1., 1., 0., 0., 1., 0.],
[0., 0., 0., 1., 1., 1., 1., 0., 1.],
[0., 0., 0., 0., 1., 1., 0., 1., 0.]])
下面是邻接矩阵的图形表示。
答: 暂无答案
评论