将张量转换为边列表

时间:2019-07-23 08:28:04

标签: python

所以我有一个.mat文件,其中包含一些张量,我必须将这些张量转换为扩展名为.edgelist的另一文件,该文件具有2列,一个代表node1,另一列用空格隔开,第一个应该分隔由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

1 个答案:

答案 0 :(得分:0)

因此,基本上,您要做的就是构建一个简单的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