numpy数组:在循环中访问元素会产生错误

时间:2012-10-24 18:47:10

标签: python arrays numpy matplotlib

此代码抛出异常:

"list index out of range"

在下面标出的行。

col_sig_squared = [np.zeros(shape=(1,6), dtype=int)]

def calculate_col_sigma_square(matrix):
    mx = np.asarray(matrix)
    for(x,y), value in np.ndenumerate(matrix):
    if(x > 4):
            continue
    else:
        val = matrix[x][y] - x_bar_col[x]
        val = val**2
        EXCEPTION-->print col_sig_squared[y] 

为什么这是一个问题? col_sig_squared是一个带索引的数组。为什么我不能这样访问它。尝试了很多东西,但不确定为什么这种语法是错误的。我是Python及其复杂的新手,任何帮助都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:1)

嗯,这条消息非常清楚地告诉你什么是错的。此时ycol_sig_squared中的项目数量更大。这并不让我感到惊讶,因为col_sig_squared被定义为包含一个项目的列表,即NumPy数组:

col_sig_squared = [np.zeros(shape=(1,6), dtype=int)]

这意味着只有col_sig_squared[0]有效。

也许你的意思是:

col_sig_squared = np.zeros(shape=(1,6), dtype=int)

现在col_sig_squared是一个NumPy数组。

答案 1 :(得分:0)

使用shape = (N,)表达NumPy 数组向量更为常见。例如:

>>> col_sig_1byN = np.zeros(shape=(1,6), dtype=int)
>>> col_sig_N = np.zeros(shape=(6,), dtype=int)
>>> print col_sig_1byN
[[0 0 0 0 0 0]]
>>> print col_sig_N
[0 0 0 0 0 0]

您可以将col_sig_N索引为col_sig_N[p],但对于col_sig_1byN,您必须col_sig_1byN[0,p] - 请注意[x,y]是索引为多维的方式NumPy数组。

要为整行/列编制索引,您可以执行[x,:] / [:,y]

而且,as kindall said,您不应该将数组嵌入列表中。