0

このコードは例外をスローします。

"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とその複雑さに慣れていないので、助けていただければ幸いです。

ありがとう

4

2 に答える 2

1

さて、メッセージは何が間違っているかをかなり明確に示しています。yはその時点で の項目数よりも大きくなっていcol_sig_squaredます。col_sig_squared1 つのアイテム、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 配列です。

于 2012-10-24T19:19:20.733 に答える
0

を使用して NumPy配列ベクトルを表現する方が一般的shape = (N,)です。例えば:

>>> 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行う必要があります-これは、多次元 NumPy 配列にインデックス付けする方法であることにcol_sig_1byN[0,p]注意してください。[x,y]

[x,:]行/列全体にインデックスを付けるには、 /を実行できます[:,y]

そして、kindallが言ったように、配列をリストに埋め込まないでください。

于 2012-10-24T20:55:42.183 に答える