Python - маскировка для цикла? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть три массива: r_vals, Tgas_vals и n_vals.Все они являются массивами фигуры (9998.).Массивы имеют повторяющиеся значения, и я хочу перебрать уникальные значения r_vals и найти соответствующие значения Tgas_vals и n_vals, чтобы я мог использовать последние два массива для вычисления средневзвешенного значения.Это то, что у меня есть сейчас:

def calc_weighted_average (r_vals,Tgas_vals,n_vals):
        for r in r_vals:
            mask = r == r_vals
            count = 0
            count += 1
            for t in Tgas_vals[mask]:
                print (count, np.average(Tgas_vals[mask]*n_vals[mask]))

    weighted_average = calc_weighted_average (r_vals,Tgas_vals,n_vals)

Проблема, с которой я сталкиваюсь, заключается в том, что функция проходит только один раз.Я неправильно реализовал маску или проблема где-то еще в цикле for?

1 Ответ

0 голосов
/ 10 декабря 2018

Я не уверен, что именно вы планируете делать со всеми средними, поэтому я брошу это туда и посмотрю, полезно ли это.Следующий код вычислит группу взвешенных средних, по одному на уникальное значение r_vals и сохранит их в словаре (который затем распечатывается).

def calc_weighted_average (r_vals, z_vals, Tgas_vals, n_vals):
    weighted_vals = {} #new variable to store rval=>weighted ave.

    for r in np.unique(r_vals):  
        mask = r_vals == r  # I think yours was backwards
        weighted_vals[r] = np.average(Tgas_vals[mask]*n_vals[mask])

    return weighted_vals

weighted_averages = calc_weighted_average (r_vals, z_vals, Tgas_vals, n_vals)

for rval in weighted_averages:
    print ('%i : %0.4f' % (rval, weighted_averages[rval])) #assuming rval is integer

в качестве альтернативы, вы можете указать "z_vals"в как-то.Ваш вопрос не был ясен в этом.

...