我的用于计算欧式距离的代码。 首先,我读取了一个文件,其中有一系列系统发育距离度量,并根据这些度量来计算欧几里德距离。 我的问题是此刻将文件保存到输出中。 我构造for循环的方式使我可以堆叠数据,但是,我希望将数据堆叠。 请在下面查看我的输出和所需输出的详细信息。
# -*- coding: utf-8 -*-
import os
import sys
import pandas as pd
import numpy as np
from scipy.spatial.distance import squareform, pdist
import scipy
pd.options.mode.chained_assignment = None # default='warn'
from itertools import combinations
from collections import Counter
import pickle
f = open(sys.argv[1], 'r')
w = open(sys.argv[2], 'w')
freader=pd.read_csv(f,sep='\t')
vector2=['kU.','kUn.','kL.']#,'kLn.','Sim.','Trip.','RF.','KC.','KCw.']
vector1=['kU','kUn','kL']#,'kLn','Sim','Trip','RF','KC','KCw']
comb1=sum([map(list, combinations(vector1, i)) for i in range(len(vector1) + 1)], [])
for i in comb1:
if i!=[]:
new_f1 = freader[i]
j = [word.replace(word, word + '.') for word in i]
new_f2 = freader[j]
ary = scipy.spatial.distance.cdist(new_f1, new_f2)
v=np.diag(ary)
v = v.tolist()
distances=''.join(i)
euclidean='\n'.join(map(str,v))
w.write(distances + '\n' + euclidean + '\n')
#print w
f.close()
给我堆积的输出文件,例如:
kU
0.1196105158
0.2359754815
kUn
0.5221363287
0.0006352575
kL
0.0986327691
0.2722213035
kUkUn
0.5356612934
0.2359763366
kUkL
0.1550325728
0.3602622183
kUnkL
0.5313706511
0.2722220447
kUkUnkL
0.5446663606
0.3602627784
但是我想要这个未堆叠的输出文件:
kU kUn kL kUkUn kUkL kUnkL kUkUnkL
0.1196105158 0.5221363287 0.0986327691 0.5356612934 0.1550325728 0.5313706511 0.5446663606
0.2359754815 0.0006352575 0.2722213035 0.2359763366 0.3602622183 0.2722220447 0.3602627784
答案 0 :(得分:2)
您可以重塑基础数组
pd.DataFrame(df.values.reshape(len(df)//3, 3)).set_index(0).T
kU kUn kL kUkUn kUkL kUnkL kUkUnkL
1 0.1196105158 0.5221363287 0.0986327691 0.5356612934 0.1550325728 0.5313706511 0.5446663606
2 0.2359754815 0.0006352575 0.2722213035 0.2359763366 0.3602622183 0.2722220447 0.3602627784