Несколько списков Python различной длины, средних и стандартных отклонений - PullRequest
0 голосов
/ 05 октября 2018

Учитывая массив списков ниже, я хочу иметь возможность создать новый список, давая среднее и стандартное отклонение столбцов

a = [ [1, 2, 3],
      [2, 3, 4],
      [3, 4, 5, 6],
      [1, 2],
      [7, 2, 3, 4]]

Требуемый результат

mean = 2.8, 2.6, 3.75, 5 STDEV = 2.48997992, 0.894427191, 0.957427108, 1.414213562

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

import numpy as np
import numpy.ma as ma
from itertools import zip_longest

a = [ [1, 2, 3],
      [2, 3, 4],
      [3, 4, 5, 6],
      [1, 2],
      [7, 2, 3, 4]]


averages = [np.ma.average(ma.masked_values(temp_list, None)) for temp_list in zip_longest(*a)]


print(averages)

1 Ответ

0 голосов
/ 05 октября 2018

Вы можете использовать эти две строки:

>>> np.nanmean(np.array(list(zip_longest(*a)),dtype=float),axis=1)
array([2.8 , 2.6 , 3.75, 5.  ])

>>> np.nanstd(np.array(list(zip_longest(*a)),dtype=float),axis=1,ddof=1)
array([2.48997992, 0.89442719, 0.95742711, 1.41421356])

nanmean и nanstd вычислить среднее и стандартное соответственно соответственно, игнорируя nan.Итак, вы передаете ему массив:

>>> np.array(list(zip_longest(*a)),dtype=float)
array([[ 1.,  2.,  3.,  1.,  7.],
       [ 2.,  3.,  4.,  2.,  2.],
       [ 3.,  4.,  5., nan,  3.],
       [nan, nan,  6., nan,  4.]])

И вычисляете среднее и стандартное отклонение для каждой строки, игнорируя NaN с.Аргумент ddof обозначает степени свободы, и я установил его на 1 в зависимости от желаемого результата (по умолчанию 0)

...