从文本文件快速读取数据

时间:2019-01-30 11:45:40

标签: python-3.x bash numpy matplotlib

我有一个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)

1 个答案:

答案 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

在此处查看更多信息: