我正在使用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/