Быстрое чтение данных из текстового файла - PullRequest
0 голосов
/ 30 января 2019

У меня есть скрипт bash, который вызывает скрипты Python.Мои скрипты на Python считывают данные из текстового файла (в основном это np.loadtxt (имя файла)). В текстовом файле содержатся числовые данные: 12 000 строк и 48 строк.просто для небольшого изменения в нисходящей обработке я должен читать эти файлы снова и снова.даже для небольших изменений в названии мне нужно прочитать этот файл.

есть ли способ, которым я могу минимизировать чтение этих данных.Могу ли я ускорить процесс чтения этих файлов?

Ниже приведен мой код

#!/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 голосов
/ 30 января 2019

Вы можете сохранить массив 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

Подробнее здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...