将张量转换为边列表

Converting tensors to edgelists

所以我有一个包含一些张量的 .mat 文件,我必须将这些张量转换为另一个扩展名为 .edgelist 的文件,其中有 2 列,一列代表节点 1,另一列由 [=21= 分隔] 第一个应该由 node2 (Python 代码)

这是张量 (:,:,1) =

第 1 列到第 18 列

     0    0.0176    0.1474         0    0.1179    0.2053    0.1075    0.1579    0.1890    0.0372    0.1620    0.1454    0.1484    0.1464    0.1164    0.1656    0.0936    0.1256
0.0176         0    0.1651    0.0176    0.1355    0.2229    0.1251    0.1755    0.2066    0.0548    0.1796    0.1630    0.1660    0.1640    0.1340    0.1832    0.1112    0.1432
0.1474    0.1651         0    0.1474    0.0296    0.0578    0.0399    0.0105    0.0416    0.1103    0.0146    0.0020    0.0010    0.0010    0.0310    0.0182    0.0539    0.0219
     0    0.0176    0.1474         0    0.1179    0.2053    0.1075    0.1579    0.1890    0.0372    0.1620    0.1454    0.1484    0.1464    0.1164    0.1656    0.0936    0.1256

期望的输出

1 32
1 22
1 20
1 18
1 14
1 13
1 12
1 11
1 9
1 8
1 7
1 6
1 5
1 4
1 3
1 2
2 31
2 22
2 20
2 18
2 14
2 8
2 4
2 3
3 14
3 9
3 10
3 33
3 29
3 28
3 8
3 4
4 14
4 13
4 8
5 11
5 7

所以基本上,您所要做的就是构建一个简单的 python 代码。我们的 35x35 维张量矩阵(张量的正面视图)由 35 个节点组成,每个十进制数是两个节点之间连接的权重。所以只要权重为0就意味着两个节点没有相互连接。因此,基于这些事实,我们创建了一个对应于 2 列的边缘列表文件 (node1_index node2_index)

def adj_to_edgelist(input_filename,output_filename,delimiter):
A=pd.read_csv(input_filename,delimiter=delimiter,index_col=0)
List=[]
for source in A.index.values:
    for target in A.index.values:
        #List.append((target,source,A[source][target]))
        #if we want to write the weight of edges we write the above line of code
        List.append((target,source,"\n"))
        print("\n")
with open(output_filename, "w") as f:
    writer = csv.writer(f)
    writer.writerows(List)
return List