В f0.py
я создаю список параметров, затем сохраняю их в массиве shape- (1000,M,L,N)
:
np.save('../data/seed_S.npy',S)
Мне нужно использовать один элемент из указанного выше массива S
в еще две функции f1.py
и f2.py
, я использую:
S = np.load('../data/seed_S.npy')
array_x = S[0]
как в f1.py
, так и в f2.py
,
, а затем я могу выполнить соответствующие вычисления с S[0]
.
Точно так же, чтобы запустить две функции f1.py
и f2.py
во второй раз, я использую второй элемент S
:
S = np.load('../data/seed_S.npy')
array_x = S[1]
в обоих f1.py
и f2.py
,
, а затем я могу сделать соответствующие вычисления с S[1]
.
и т. д.
Мой вопрос : Я хочу запустить функции f1.py
и f2.py
N раз (N = 1000), мне всегда приходится менять свои функции f1.py
и f2.py
. Можно ли реализовать такой же запуск без изменения самих функций? Я хочу запустить пары функций f1.py
- f2.py
1000 раз параллельно. Кроме того, я также пытался реализовать идею без функции f0.py
, но при каждом запуске f1.py
генерирует и сохраняет array_x
, а соответствующий f2.py
читает и использует этот array_x
. Какой метод может быть лучше? Может ли кто-нибудь дать мне предложение? Спасибо!
Я пробовал следующую реализацию.
# f1.py
import numpy as np
from modules import *
class system1:
def __init__(self,N,M,L):
# store the parameters in the system1
self.M = int(M)
self.L = int(L)
self.N = int(N)
self.S = init_S(M,L,N)
self.T = 7
# The array
self.S_traj = np.zeros((self.T, self.M, self.L+1, self.N))
# Main
if __name__=='__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-M', nargs='?', const=10, type=int, default=10, \
help="the number of samples.")
parser.add_argument('-L', nargs='?', const=5, type=int, default=5, \
help="the number of hidden layers.")
parser.add_argument('-N', nargs='?', const=8, type=int, default=8, \
help="the number of nodes per layer.")
args = parser.parse_args()
M,N,L = args.M, args.N, args.L
# Preparing parameters for using in f2.py
parameter_list = np.array([M,L,N])
# Initilize an instance of system1
o = system1(N,M,L)
#=================================
#Save the seed for f2.py
#=================================
np.save('../data/para_list.npy', parameter_list)
np.save('../data/seed_S_M{:d}_L{:d}_N{:d}.npy'.format(M,L,N),o.S)
# Run some calculation ...
o.S_traj[0,:,:,:] = o.S # Note that self.S_traj will independent of self.S from now on.
for index in range(o.T):
print("Runing f1...")
print("Done.")
# f2.py
import numpy as np
from modules import *
class system2:
def __init__(self):
# f2.py accept the same intial configurations as f1.py.
# to obtain the basic parameters: M, L, N
para_list = np.load('../data/para_list.npy')
M = para_list[0]
L = para_list[1]
N = para_list[2]
# then store these parameters
self.M = M
self.L = L
self.N = N
self.T = 7
#arrays
self.S_traj = np.zeros((self.T, self.M, self.L+1, self.N))
self.S = np.load('../data/seed_S_M{:d}_L{:d}_N{:d}.npy'.format(self.M,self.L,self.N))
# Main
if __name__=='__main__':
import argparse
# Initilize an instance of system2.
o = system2()
# run calculation ...
o.S_traj[0,:,:,:] = o.S
for index in range(o.T):
print("Running f2...")
print("Done.")
, а modules.py
это:
# modules.py
import numpy as np
# Functions
def init_S(M,L,N):
S = np.ones((M,L+1,N))
for i in range(M):
for j in range(L+1):
S[i,j,:] = generate_coord(N)
return S
def generate_coord(N):
"""Randomly set the initial coordinates."""
v = np.ones(N)
list = [-1,0]
for i in range(N):
v[i] = np.random.choice(list)
return v