[英]Find mean of nth item in list of lists in Python
after a lot of searching I haven't been able to find the answer to what seems like a simple question. 经过大量搜索后,我仍无法找到看似简单问题的答案。
I have some code that is doing a Monte Carlo simulation and storing the results in a nested list. 我有一些代码正在执行蒙特卡洛模拟并将结果存储在嵌套列表中。 Here are the results I generate from a 10-trial simulation:
这是我从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]]
Where I'm stuck is I'd like to find the mean of the 0th item in each list, the 1st item, and so on. 卡住的地方是我想在每个列表中找到第0个项目的均值,第一个项目等。 I generally use numpy.mean for this, but how do I instruct it to only average the nth item?
我通常为此使用numpy.mean,但是如何指示它仅对第n个项目取平均值?
You can use np.mean
with axis=0
: 您可以将
np.mean
与axis=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])
If I understood the question well, the answer is the same as @Psidom proposed but over axis=1
. 如果我对问题的理解很好,答案与@Psidom建议的相同,但在
axis=1
。 Also, you may need to convert it to a numpy array beforehand: 另外,您可能需要事先将其转换为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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.