我有一个bash脚本,它调用python脚本。 我的python脚本从文本文件(主要是np.loadtxt(filename))读取数据 文本文件具有12,000行的数值数据和48个cols浮点数。
在绘制它们时一次又一次地读取这些文件非常耗时。只是为了在下游处理中进行少量更改,我不得不一次又一次地读取这些文件。即使标题有微小变化,我也需要阅读这些文件。
有没有一种方法可以最大程度地减少此数据读取。我可以使这些文件读取过程更快吗?
下面是我的代码
#!/bin/bash
################# This script should be run after production run of remd
export root=`pwd`
printf "Root dir $root\n"
psf=(pwat_heq.psf pu8_heq.psf u8t4_heq.psf)
pdb=(pwat_heq.pdb pu8_heq.pdb u8t4_heq.pdb)
ori=(pwat_ori.pdb pu8_ori.pdb u8t4_ori.pdb)
extract=(extract.psf extract.pdb)
solu=("1leo_5fpps_pwat" "1leo_5fpps_u8" "1leo_5fpps_u8_t4")
###############################################################################
# change according to you simulation system #
###############################################################################
select_system(){
cd $root
eqheatpdb=${pdb[$l]} # VERY IMPORTANT
eqheatpsf=${psf[$l]}
oristr=${ori[$l]}
extractpsf=${extract[0]}
extractpdb=${extract[1]}
# pddcd=${dcd[$l]}
jobnum=2 # VERY IMPORTANT CHANGE JOB-NUMBER
cd ${solu[$l]}
printf "\ncurrent working dir ${root}\n"
printf "\ncurrent working system ${eqheatpdb} and ${eqheatpsf}\n\n"
}
dir_structure(){
mkdir -p recen/{0..47}
mkdir -p final_nativecontacts/{0..47}
mkdir extract
mkdir rmsd
cp $root/${solu[2]}/anal/*.{py,inp,str} .
}
call_python(){
printf "contour python script running"
python contour.py
}
Contour.py示例
import numpy as np
from mpl_toolkits.mplot3d import axes3d
txt="I need the caption to be present a little below X-axis"
paths=["1leo_5fpps_pwat", "1leo_5fpps_u8", "1leo_5fpps_u8_t4"]
temp = np.linspace(298,500,48).reshape(48,1)
f, ax = plt.subplots(3, sharex=True)
for i in range(3):
filename1=open("{}/{}/anal/all_frac.dat".format(os.environ["root"], paths[i]))
xf = np.loadtxt(filename1, dtype=float)
答案 0 :(得分:0)
您可以在第一次读取Numpy数组后将其保存在二进制文件中,从二进制文件读取会更快。修改Contour.py:
for i in range(3):
filename1=open("{}/{}/anal/all_frac.dat".format(os.environ["root"], paths[i]))
filename1_npy_cache = filename1 + ".npy"
if Path(filename1_npy_cache).is_file():
xf = np.load(filename1_npy_cache)
else:
xf = np.loadtxt(filename1, dtype=float)
np.save(filename1_npy_cache, xf) # delete the file if content changes
在此处查看更多信息: