在 Python 中的列表列表中查找第 n 个项目的平均值

Find mean of nth item in list of lists in Python

经过大量搜索后,我没能找到看似简单的问题的答案。

我有一些代码正在执行 Monte Carlo 模拟并将结果存储在嵌套列表中。以下是我从 10 次试验模拟中生成的结果:

[[1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1], [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1], [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1], [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0], [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1], [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1]]

我遇到困难的地方是我想找到每个列表中第 0 项、第 1 项等的平均值。我通常为此使用 numpy.mean,但如何指示它仅对第 n 项进行平均?

您可以将 np.meanaxis=0 一起使用:

lst = [[1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1], [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1], [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1], [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0], [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1], [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1]]
np.mean(lst, axis=0)
# array([ 0.9,  1. ,  0.8,  0.9,  0.6,  0.8,  0.5,  0.7,  0.8,  0.5,  0.7, 0.5,  0.6])

如果我很好地理解了这个问题,答案与@Psidom 提出的相同,但超过 axis=1。此外,您可能需要事先将其转换为 numpy 数组:

lst = np.array([[1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1], 
                [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], # and so on...)
np.mean(lst, axis=1)