将张量转换为边列表
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
所以我有一个包含一些张量的 .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