使用节点行和列位置字典将边列表转换为稀疏转换矩阵?

2024-06-11 18:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个–大–数据框,在一个二部图中有一列边。我想把它转换成python稀疏转换矩阵

因此,我有一个数据框,其中有一个边列表,将第1部分(a,b,c)中的节点与第(x,y,z)部分链接起来。边具有多重性:在本例中,从b到y有两条边

start  end  multiplicity
    a    x             1
    a    y             1
    b    y             2
    b    z             1
    c    x             1
    c    z             1

我想要的结果是一个稀疏矩阵,在本例中为3x3。我有第1部分和第2部分的字典,指出哪个节点对应于生成的转换矩阵的哪些行和列:

dic1 = {'a':0,'b':1,'c':2}
dic2 = {'x':1,'y':0,'z':2}

所以我想要矩阵

  y x z
a 1 1 0
b 2 0 1
c 0 1 1

…但在稀疏(csr_矩阵、lil_矩阵或coo_矩阵)中。我曾尝试在边列表上迭代,但对于长列表来说太慢了。 此外,基于pivot的方法将生成完整的矩阵,这将是缓慢和内存消耗的。 有没有一种有效的方法来获得我想要的稀疏矩阵


Tags: 数据方法列表字典节点链接矩阵start
1条回答
网友
1楼 · 发布于 2024-06-11 18:22:14

据我所知,您可以尝试使用^{}我添加了两个变量mfinal以提高可读性,您可以在测试后用一个变量替换它们):

m = df.pivot(*df).fillna(0).rename_axis(index=None,columns=None)
final = m.reindex(index=m.index[m.index.map(dic1)],columns=m.columns[m.columns.map(dic2)])

print(final)

     y    x    z
a  1.0  1.0  0.0
b  2.0  0.0  1.0
c  0.0  1.0  1.0

相关问题 更多 >