所以我有一个.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
答案 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