Используя один список, чтобы найти среднее из трех переменных - PullRequest
0 голосов
/ 09 октября 2019

В следующем коде я объявляю три списка только для того, чтобы найти среднее значение трех переменных. Может ли код быть более кратким? например, использование одного списка.

import numpy as np
rmse_train_arr=[]
wt_error_train_arr=[]
rmse_test_arr=[]
for i in range(5):
    rmse_train = i
    wt_error_train=i+5
    rmse_test=i+6

    rmse_train_arr.append(rmse_train)
    wt_error_train_arr.append(wt_error_train)
    rmse_test_arr.append(rmse_test)

print(np.array(rmse_train_arr).mean(),np.array(wt_error_train_arr).mean(),np.array(rmse_test_arr).mean())

for i in range(5) - это просто упрощение с целью задать здесь вопрос, в действительности вы можете предположить, что не можете знать точное значение rmse_train, wt_error_trainи т. д. во время цикла for. Цель просто найти их смысл в конце.

1 Ответ

0 голосов
/ 09 октября 2019

Думаю, это лучший подход к ведению списков:

rmse_train_mean = 0
wt_error_train_mean = 0
rmse_test_mean = 0
counter = 0  # if you don't know how many elements there are

for i in range(5):
    rmse_train = i
    wt_error_train = i + 5
    rmse_test = i + 6

    rmse_train_mean += rmse_train
    wt_error_train_mean += wt_error_train
    rmse_test_mean += rmse_test

    counter += 1

print(rmse_train_mean / counter, wt_error_train_mean / counter, rmse_test_mean / counter)

Вывод

2.0 7.0 8.0

Существует хотя бы один способ сохранить один список, если нужно, но только если вы должны:

import numpy as np

one = []

for i in range(5):
    rmse_train = i
    wt_error_train = i + 5
    rmse_test = i + 6

    one.extend([rmse_train, wt_error_train, rmse_test])

result = np.mean([one[::3], one[1::3], one[2::3]], axis=1)

Вывод

[2. 7. 8.]

Первый подход делает все это за один проход и не сохраняет несколько(или один) список в памяти.

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