python中np.array 矩阵的高级操作

在论文源码中看到一种没用过的np.array 矩阵的操作,记录下来,以便后续的学习。

废话不多说直接上源码:

#代码摘抄自ST_GCN源码中的graph.py
import numpy as np

def get_hop_distance(num_node, edge, max_hop=1):
    A = np.zeros((num_node, num_node))
    for i, j in edge:
        A[j, i] = 1
        A[i, j] = 1

    # compute hop steps
    # np.inf (e.g. infinity)
    hop_dis = np.zeros((num_node, num_node)) + np.inf
    transfer_mat = [np.linalg.matrix_power(A, d) for d in range(max_hop + 1)]
    arrive_mat = (np.stack(transfer_mat) > 0)
    for d in range(max_hop, -1, -1):
        hop_dis[arrive_mat[d]] = d
    return hop_dis

截取里面的一小节

#max_hop=1
#假设 arrive_mat=array([[[True,True],
#					[True,False]],
#                   [[True,False],
#					[True,False]]])
# hop_dis=array([[inf,inf],[inf,inf]]) 
# inf是infinity的缩写,表示无穷大

for d in range(max_hop, -1, -1):
        hop_dis[arrive_mat[d]] = d

#结果为:
# hop_dis=array([0,0],
#               [0,inf])

hop_dis的变化过程如下:
hop_dis=array([[inf,inf],[inf,inf]]) —> hop_dis=array([[0,0],[0,inf]])
其实可以分开为两部分,

  1. hop_dis[ arrive_mat[1] ] =1
    hop_dis=array([[nf,inf],[inf,inf]]) —> hop_dis=array([[1,inf],[1,inf]])
    2)hop_dis[ arrive_mat[0] ] =0
    hop_dis=array([[1,inf],[1,inf]])—> hop_dis=array([[0,0],[0,inf]])

矩阵hop_dis中的元素根据arrive_mat中对应位置的bool值进行变化,若对应位置为True则执行赋值操作。
arrive_mat[0][0][0]=True ,则当d=0时,hop_dis[0][0]=0

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值