Python多个不同长度,平均值和标准偏差的列表

时间:2018-10-05 18:58:32

标签: python list mean stdev

鉴于下面的列表数组,我希望能够创建一个新列表,给出列的平均值和标准差

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

必填结果

平均值= 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 :(得分:0)

您可以使用以下两行:

>>> 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])

nanmeannanstd分别计算均值和标准差,而忽略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.]])

并计算每行的均值和标准差,而忽略NaNddof参数代表自由度,我根据您想要的输出将其设置为1(默认值为0)