在Python中从n×n矩阵创建邻接矩阵

时间:2019-04-18 15:42:28

标签: python dataframe matrix adjacency-list

我需要计算(I-Q)的逆矩阵,这可以让我有时间吸收(以下代码中的Q_inv_F)。而且,我需要追溯与每一行和每一列的位置相关联的数值,以返回该数字所指的状态。但是,当我需要将其放在Abs_t_F之类的数据框中以调出其原始状态以进行下一步时,这种由n乘n矩阵得到的结果仅给我索引和列名作为数字。 我现在使用的代码非常基础,因为找不到更好的代码可以给我类似的结果。但是,正如预期的那样,这些for循环需要花费大量时间和内存才能运行。我试图在网上找到一些提示,但没有成功。

您可以在我的代码中找到与此问题相关的部分,如下所示:

I = np.identity(Q_mat.shape[0])
Q_inv_F= np.linalg.pinv(I-Q_mat)
t_count=Q_inv_F.shape[0]*Q_inv_F.shape[1]
Abs_t_F = pd.DataFrame(np.nan, index=range(t_count), columns=['Row','Col','Prob'])
ss=0
for i in range(0, Q_inv_F.shape[0], 1):
for j in range(0, Q_inv_F.shape[1], 1):
    Abs_t_F.Row[ss] = i
    Abs_t_F.Col[ss] =j
    Abs_t_F.Prob[ss] = Q_inv_F[i,j]
    ss+=1
# Function for Returning the Initial States
def find_in_dictT_F(n):
for i in dict_Tstates_F.keys():
    if (dict_Tstates_F[i]== n):
        return i
Abs_t_F['State2Q'] = [find_in_dictT_F(Abs_t_F.Col[i]) for i in range(Abs_t_F.shape[0])]
Abs_t_F['State1Q'] = [find_in_dictT_F(Abs_t_F.Row[i]) for i in range(Abs_t_F.shape[0])]

0 个答案:

没有答案