我正在使用2D列表,我想按行计算其平均值。以下是我的代码:

import numpy as np

mylist = np.zeros((2,120))    # This gives you a 2 by 120 2D list with 2 rows, and 120 columns
average_list = np.zeros(120)

for col in xrange(120):
    average_list[col] = np.mean(mylist[:][col])


但是,上面的块会生成此代码:


  IndexError:索引2超出了轴2的大小2的范围


正如我在调试期间发现的那样,问题发生在col中的np.mean(mylist[:][col])

我可以知道我对此有何错吗?

谢谢。

最佳答案

修复代码(最少的更改)的一种方法是

for col in xrange(120):
    average_array[col] = np.mean(myarray[:, col])


但是,更好的方法是避免使用for-loop并使用axis=0

average_array = myarray.mean(axis=0)   # 1


axis=0告诉mean在第一个轴上取平均值,即
    行。



一个小例子可以帮助您了解myarray[:][col]myarray[:, col]之间的区别:

In [7]: myarray = np.arange(6).reshape(2,3)

In [8]: myarray
Out[8]:
array([[0, 1, 2],
       [3, 4, 5]])

In [9]: myarray[:][0]
Out[9]: array([0, 1, 2])

In [10]: myarray[:, 0]
Out[10]: array([0, 3])


如您所见,myarray[:][0]选择myarray(副本)的第0行。因此,当myarray[:][col]大于1时,col会引发IndexError,因为只有2行。

关于python - 如何在Python中访问2D列表中的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21855243/

10-15 23:32