重构同事代码

1. 减少循环层数

  • 修改前
    FeatureFlat_Euc = np.zeros([len(Bins_Euc) - 1, len(ProEleList) * len(LigEleList)], float)
    FeatureFlat_Ele = np.zeros([len(Bins_Ele) - 1, len(ProEleList) * len(LigEleList)], float)

    for i in range(len(ProEleList)):
        for j in range(len(LigEleList)):
            fid = i * len(LigEleList) + j
            for k in range(len(Bins_Euc) - 1):
                FeatureFlat_Euc[k, fid] = Feature_Euc[i, j, k]
            for p in range(len(Bins_Ele) - 1):
                FeatureFlat_Ele[p, fid] = Feature_Ele[i, j, p]
  • 修改后
    FeatureFlat_Euc = np.zeros([len(Bins_Euc) - 1, len(ProEleList) * len(LigEleList)], float)
    FeatureFlat_Ele = np.zeros([len(Bins_Ele) - 1, len(ProEleList) * len(LigEleList)], float)

    for i in range(len(ProEleList)):
        for j in range(len(LigEleList)):
            fid = i * len(LigEleList) + j
            FeatureFlat_Euc[:, fid] = Feature_Euc[i, j]
            FeatureFlat_Ele[:, fid] = Feature_Ele[i, j]

2. 避免重复轮子

  • 修改前
dis=math.sqrt((combination[q][0][0]-combination[q][1][0])**2\
              +(combination[q][0][1]-combination[q][1][1])**2\
              +(combination[q][0][2]-combination[q][1][2])**2)
  • 修改后
dis = euclidean(combination[q][0][:3], combination[q][1][:3])

3. 利用好生成器

  • 修改前
            combination=list(itertools.product(PRO[ep],LIG[el]))
            feature_ele=[]
            for q in range(len(combination)):
            	dis = euclidean(combination[q][0][:3], combination[q][1][:3])
                elec_force=1.0/(1.0+exp(-100.0*combination[q][0][3]*combination[q][1][3]/dis))
  • 修改后
            combination = itertools.product(protein_coord[ep], ligand_coord[el])
            for pair in combination:
                dis = euclidean(pair[0][:3], pair[1][:3])
                elec_force = 1.0 / (1.0 + math.exp(-100.0 * (pair[0][3] *pair[1][3] )/ dis))

4. pythonic循环

  • 修改前
            for a in range(len(protein_coord)):
                if list(protein_coord.keys())[a] in ep:
                    propts.extend(protein_coord[list(protein_coord.keys())[a]])
  • 修改后
            for k in list(protein_coord.keys()):
                if k in ep:
                    propts.extend(protein_coord[k])
发布了281 篇原创文章 · 获赞 35 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/TQCAI666/article/details/102520665