Я новичок в Python и борюсь за l oop через строки и столбцы двух разных наборов данных, чтобы сгенерировать массив значений.
У меня есть два кадра данных (parameterMatrix и growthRates) ; один показывает массив видов и силы их взаимодействия, а другой показывает скорость роста каждого вида.
параметрMatrix :
herbivores youngScrub matureScrub sapling matureTree grassHerbs
herbivores 0.0 0.02 0 0.05 0 0.5
youngScrub -0.2 0.00 0 0.00 0 0.0
matureScrub 0.0 0.00 0 0.00 0 0.0
sapling -0.2 0.00 0 0.00 0 0.0
matureTree 0.0 0.00 0 0.00 0 0.0
grassHerbs -5.0 0.00 0 0.00 0 0.0
курсы роста :
herbivores youngScrub matureScrub sapling matureTree grassHerbs
0 0.1 0 0.1 0.1 0 0.2
Я пытаюсь сгенерировать массив значений для каждого из шести видов, который в конечном итоге можно использовать для расчета скорости изменения каждого вида с течением времени. Я вручную выписал каждое из уравнений (см. Ниже), но мне интересно, есть ли более быстрый способ сделать это, например, с помощью циклического прохождения каждого из этих фреймов данных.
def ecoNetwork(X, t=0):
num_herbivores = X[0]
num_youngScrub = X[1]
num_matureScrub = X[2]
num_sapling = X[3]
num_matureTree = X[4]
num_grassHerb = X[5]
return np.array([
# herbivores
(growthRates['herbivores'][0])*num_herbivores + (parameterMatrix['herbivores']['herbivores']*num_herbivores*num_herbivores)
+ (parameterMatrix['herbivores']['youngScrub']*num_herbivores*num_youngScrub)
+ (parameterMatrix['herbivores']['matureScrub']*num_herbivores*num_matureScrub)
+ (parameterMatrix['herbivores']['sapling']*num_herbivores*num_sapling)
+ (parameterMatrix['herbivores']['matureTree']*num_herbivores*num_matureTree)
+ (parameterMatrix['herbivores']['grassHerbs']*num_herbivores*num_grassHerb)
,
# young scrub (X1)
(growthRates['youngScrub'][0])*num_youngScrub + (parameterMatrix['youngScrub']['herbivores']*num_youngScrub*num_herbivores)
+ (parameterMatrix['youngScrub']['youngScrub']*num_youngScrub*num_youngScrub)
+ (parameterMatrix['youngScrub']['matureScrub']*num_youngScrub*num_matureScrub)
+ (parameterMatrix['youngScrub']['sapling']*num_youngScrub*num_sapling)
+ (parameterMatrix['youngScrub']['matureTree']*num_youngScrub*num_matureTree)
+ (parameterMatrix['youngScrub']['grassHerbs']*num_youngScrub*num_grassHerb)
,
# mature scrub
(growthRates['matureScrub'][0])*num_matureScrub + (parameterMatrix['matureScrub']['herbivores']*num_matureScrub*num_herbivores)
+ (parameterMatrix['matureScrub']['youngScrub']*num_matureScrub*num_youngScrub)
+ (parameterMatrix['matureScrub']['matureScrub']*num_matureScrub*num_matureScrub)
+ (parameterMatrix['matureScrub']['sapling']*num_matureScrub*num_sapling)
+ (parameterMatrix['matureScrub']['matureTree']*num_matureScrub*num_matureTree)
+ (parameterMatrix['matureScrub']['grassHerbs']*num_matureScrub*num_grassHerb)
,
# saplings
(growthRates['sapling'][0])*num_sapling + (parameterMatrix['sapling']['herbivores']*num_sapling*num_herbivores)
+ (parameterMatrix['sapling']['youngScrub']*num_sapling*num_youngScrub)
+ (parameterMatrix['sapling']['matureScrub']*num_sapling*num_matureScrub)
+ (parameterMatrix['sapling']['sapling']*num_sapling*num_sapling)
+ (parameterMatrix['sapling']['matureTree']*num_sapling*num_matureTree)
+ (parameterMatrix['sapling']['grassHerbs']*num_sapling*num_grassHerb)
,
# mature trees
(growthRates['matureTree'][0])*num_matureTree + (parameterMatrix['matureTree']['herbivores']*num_matureTree*num_herbivores)
+ (parameterMatrix['matureTree']['youngScrub']*num_matureTree*num_youngScrub)
+ (parameterMatrix['matureTree']['matureScrub']*num_matureTree*num_matureScrub)
+ (parameterMatrix['matureTree']['sapling']*num_matureTree*num_sapling)
+ (parameterMatrix['matureTree']['matureTree']*num_matureTree*num_matureTree)
+ (parameterMatrix['matureTree']['grassHerbs']*num_matureTree*num_grassHerb)
,
# grass & herbaceous plants
(growthRates['grassHerbs'][0])*num_grassHerb + (parameterMatrix['grassHerbs']['herbivores']*num_grassHerb*num_herbivores)
+ (parameterMatrix['grassHerbs']['youngScrub']*num_grassHerb*num_youngScrub)
+ (parameterMatrix['grassHerbs']['matureScrub']*num_grassHerb*num_matureScrub)
+ (parameterMatrix['grassHerbs']['sapling']*num_grassHerb*num_sapling)
+ (parameterMatrix['grassHerbs']['matureTree']*num_grassHerb*num_matureTree)
+ (parameterMatrix['grassHerbs']['grassHerbs']*num_grassHerb*num_grassHerb)
])
# time points
t = np.linspace(0, 50)
# Initial conditions
X0=np.empty(6)
X0[0]= 10
X0[1] = 30
X0[2] = 50
X0[3] = 70
X0[4] = 90
X0[5] = 110
X0 = np.array([X0[0], X0[1], X0[2], X0[3], X0[4], X0[5]])
# Integrate the ODEs
X = integrate.odeint(ecoNetwork, X0, t)
Возможно ли это и если да, то как лучше это сделать?