Python将矩阵转换为边列表/长格式

2021-04-11 15:48:14 发布

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

我有一个非常大的csv文件,矩阵如下:

null,A,B,C

A,0,2,3

B,3,4,2

C,1,2,4

它总是一个n*n矩阵。第一列和第一行是名称。我想将其转换为3列格式(也可以称为边缘列表、长格式等),如下所示:

^{pr2}$

我用过:

row = 0
for line in fin:
    line = line.strip("\n")
    col = 0
    tokens = line.split(",")
    for t in tokens:
        fout.write("\n%s,%s,%s"%(row,col,t))
        col += 1
    row += 1

不起作用。。。在

你能帮忙吗?谢谢您。。在

2条回答
网友
1楼 ·

您还需要在打印单个单元格时枚举列标题。在

对于矩阵文件材料.csv

null,A,B,C
A,0,2,3
B,3,4,2
C,1,2,4

以下程序:

^{pr2}$

打印输出:

A,A,0
A,B,2
A,C,3
B,A,3
B,B,4
B,C,2
C,A,1
C,B,2
C,C,4

要生成上对角线,可以使用以下脚本:

csv = open("mat.csv")

columns = csv.readline().strip().split(',')[1:]
for i, line in enumerate(csv):
    tokens = line.strip().split(',')
    row = tokens[0]
    for column, cell in zip(columns[i:],tokens[i+1:]):
        print '{},{},{}'.format(row,column,cell)

其结果是:

A,A,0
A,B,2
A,C,3
B,B,4
B,C,2
C,C,4
网友
2楼 ·

您需要跳过每行的第一列:

for t in tokens[1:]:

相关问题