【问题标题】:Making Python code more compact and efficient让 Python 代码更紧凑、更高效
【发布时间】:2019-08-05 14:08:05
【问题描述】:

我有以下代码,它基本上加载了我在不同文件夹中的一些数据文件,对每个温度下的每次重复取平均值,然后绘制结果。代码工作正常,当我只有几组数据时也没关系。但是现在我有 9 组不同的温度,每组重复 5 次,我认为代码变得太长了。有没有办法巩固它?谢谢!

import numpy as np 
import matplotlib.pyplot as plt

steps    = np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/1st/Average_MSD.txt',usecols=[0])


# T = 303 K

msd303_1 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/1st/Average_MSD.txt',usecols=[1])
msd303_2 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/2nd/Average_MSD.txt',usecols=[1])
msd303_3 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/3rd/Average_MSD.txt',usecols=[1])
msd303_4 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/4th/Average_MSD.txt',usecols=[1])
msd303_5 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/5th/Average_MSD.txt',usecols=[1])

msd303 = np.vstack((msd303_1,msd303_2,msd303_3,msd303_4,msd303_5)).T
msd303_mean = np.mean(msd303,axis=1)
msd303_std = np.std(msd303,axis=1)

# T = 313 K

msd313_1 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/313K/1st/Average_MSD.txt',usecols=[1])
msd313_2 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/313K/2nd/Average_MSD.txt',usecols=[1])
msd313_3 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/313K/3rd/Average_MSD.txt',usecols=[1])
msd313_4 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/313K/4th/Average_MSD.txt',usecols=[1])
msd313_5 = np.loadtxt('/home/aperego/data/HexaPaper/nvt/313K/5th/Average_MSD.txt',usecols=[1])

msd313 = np.vstack((msd313_1,msd313_2,msd313_3,msd313_4,msd313_5)).T
msd313_mean = np.mean(msd313,axis=1)
msd313_std = np.std(msd313,axis=1)


plt.yscale("log")
plt.xscale("log")
plt.plot(steps,msd303_mean)
plt.plot(steps,msd313_mean)

【问题讨论】:

  • 使用函数。
  • 制作一个函数,取nvt之后的字符串部分和列号,并返回np.loadtxt的结果。这应该会简化一些事情。
  • 我没有投反对票,但您可能会投反对票,因为 stackoverflow 不是代码审查的正确位置(它不是用来改进代码,而是用来解决问题)。你可以改用这个:codereview.stackexchange.com
  • @CorentinLimier 谢谢,我不知道 abot codereview!

标签: python performance loops consolidation


【解决方案1】:
np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/1st/Average_MSD.txt',usecols=[1])

由于您经常运行此程序,请尝试替换为

def load(pos):
    return np.loadtxt('/home/aperego/data/HexaPaper/nvt/303K/'+pos+'/Average_MSD.txt',usecols=[1])

然后使用msd303_1 = load('1st')。改进不是很大,但更具可读性。

【讨论】:

  • 如果您正在使用当前的 Python 版本,您可以使用 f 字符串:f'/home/aperego/data/HexaPaper/nvt/303K/{pos}/Average_MSD.txt'
猜你喜欢
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 2015-01-26
  • 2021-12-07
  • 2013-09-06
相关资源
最近更新 更多