Есть ли способ упростить многократное понимание списка? - PullRequest
0 голосов
/ 29 ноября 2018

В моем коде есть что-то вроде этого:

mean_realp = [[df[(df['fvpwm'] == v) & (df['gppwm'] == w)]['P'].mean()                                          for v in uvpwms] for w in upwms]
mean_setp = [[df[(df['fvpwm'] == v) & (df['gppwm'] == w)]['pressure setpoint [mbar]'].mean()                    for v in uvpwms] for w in upwms]
stddev_realp = [[df[(df['fvpwm'] == v) & (df['gppwm'] == w)]['P'].std()                                         for v in uvpwms] for w in upwms]
stddev_pbefore = [[df[(df['fvpwm'] == v) & (df['gppwm'] == w)]['Pbefore [mbar]'].std()                          for v in uvpwms] for w in upwms]
maxes_realp = [[df[(df['fvpwm'] == v) & (df['gppwm'] == w)]['P'].max()                                          for v in uvpwms] for w in upwms]
mins_realp = [[df[(df['fvpwm'] == v) & (df['gppwm'] == w)]['P'].min()                                           for v in uvpwms] for w in upwms]

Есть ли способ упростить это без использования внешних циклов?Я ничего против них не имею, но должно быть более элегантное решение ...

Для последней части

for v in uvpwms] for w in upwms]

Я не могу придумать ничего более простого, чем внешние циклы.

А как же внутренняя часть, выборы.Есть ли более простое решение (например, лямбда-выражение)?

1 Ответ

0 голосов
/ 29 ноября 2018

Создайте вспомогательную функцию для выделения и параметризации различий.Это начало, и вы, вероятно, должны найти более подходящее имя, которое лучше соответствует тому, что на самом деле представляет набор данных:

def transformMatrix(matrix, label, transformer):
    return [[df[transformer((df['fvpwm'] == v) & (df['gppwm'] == w)][label]) for v in matrix] for w in matrix]

mean_realp = transformMatrix(upwms, 'P', lambda elements: elements.mean())
mean_setp = transformMatrix(upwms, 'pressure setpoint [mbar]', lambda elements: elements.mean())
stddev_realp = transformMatrix(upwms, 'P', lambda elements: elements.std())
stddev_pbefore = transformMatrix(upwms, 'Pbefore [mbar]', lambda elements: elements.std())
maxes_realp = transformMatrix(upwms, 'P', lambda elements: elements.max())
mins_realp = transformMatrix(upwms, 'P', lambda elements: elements.min())
...