Как правильно сделать вложенный для l oop, используя определенную функцию для создания массива значений - PullRequest
0 голосов
/ 24 марта 2020

Я определил свою функцию (функция разбиения partfunc_E, функция энергии ионизации chiI и температуры T), и мне нужно создать вложенное значение для l oop to first, l oop для значений энергий ионизации ( chiI, вектор) и внутренний l oop для оценки суммы по всем энергетическим состояниям для иона (здесь я использую 5). Выходными данными должен быть вектор значений функции распределения, связанных с каждой энергией ионизации в массиве хи.

(из наших инструкций): для энергии 10000 К, используя энергии ионизации кальция и температуру 10000 K должен дать что-то вроде:

[ 1.45605581  1.45648718  1.45648849  1.45648849  1.45648849]

Примечание: g = 1 для всех состояний.

Я не знаю, что я сделал неправильно, но я не понимаю, чего они ожидают вообще Я получаю массив длиной 100, и все значения в массиве одинаковы. Следующий код - моя попытка.

import matplotlib.pylab as plt
import numpy as np
from astropy import units as u
from astropy import constants as const
%matplotlib inline

k = const.k_B.to('eV*K**-1')
#print(k)

def partfunc_E(chiI,T):
    return g*np.exp(-(chiI/(k*T)))

chiI = [6.1131554, 11.871719, 50.91316, 67.2732, 84.34]*u.eV
T=(10000)*u.K
g= 1

partition_Ca = []

for i in chiI:
    for j in range(0,10,1):
        function = partfunc_E(chiI,T)
        partition_Ca.append(sum(partfunc_E(chiI,T)))

1 Ответ

0 голосов
/ 24 марта 2020

Вы делаете что-то вроде этого:

In [336]: x = np.arange(3) 
     ...: alist = [] 
     ...: for i in x: 
     ...:     for j in range(2): 
     ...:         alist.append(np.exp(x).sum()) 
     ...:                                                                                      
In [337]: alist                                                                                
Out[337]: 
[11.107337927389695,
 11.107337927389695,
 11.107337927389695,
 11.107337927389695,
 11.107337927389695,
 11.107337927389695]

это помещает одно и то же значение в alist каждый раз. Цикл ничего нового не делает:

In [338]: np.exp(x).sum()                                                                      
Out[338]: 11.107337927389695

Вместо этого вы можете использовать i, переменную итерации в l oop:

In [339]: x = np.arange(3) 
     ...: alist = [] 
     ...: for i in x: 
     ...:     alist.append(np.exp(i)) 
     ...:                                                                                      
In [340]: alist                                                                                
Out[340]: [1.0, 2.718281828459045, 7.38905609893065]

Но поскольку np.exp работает с массив, итерировать не нужно.

In [341]: np.exp(x)                                                                            
Out[341]: array([1.        , 2.71828183, 7.3890561 ])

Как я покажу, вам нужно поэкспериментировать с некоторыми базовыми c Python циклами и детально проверить результаты. Не пишите большой сценарий, а затем почесывайте голову, если результаты не верны. Испытайте образцы и убедитесь, что вы понимаете каждый шаг.

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