web-dev-qa-db-ja.com

IndexError:配列にはインデックスが多すぎます

私はこれらのスレッドのトンがあることを知っていますが、それらのすべては3x3行列やその種のもののような非常に単純な場合のためのものであり、解決策は私の状況にも当てはまりません。それで、私はGをl1に対してグラフ化しようとしています(これは11ではなくL1です)。データは、Excelファイルからロードしたファイルにあります。 Excelファイルは14x250なので、引数は14個あり、それぞれ250データポイントです。私は別のユーザ(Hugh Bothwellに叫ぶ)を私のコードのエラーで助けてもらったが、今度は別のエラーが表面化した。

問題のコードは次のとおりです。

# format for CSV file:
header = ['l1', 'l2', 'l3', 'l4', 'l5', 'EI',
      'S', 'P_right', 'P1_0', 'P3_0',
      'w_left', 'w_right', 'G_left', 'G_right']

def loadfile(filename, skip=None, *args):
    skip = set(skip or [])
    with open(filename, *args) as f:
        cr = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
        return np.array(row for i,row in enumerate(cr) if i not in skip)
#plot data
outputs_l1 = [loadfile('C:\\Users\\Chris\\Desktop\\Work\\Python Stuff\\BPCROOM - Shingles analysis\\ERR analysis\\l_1 analysis//BS(1) ERR analysis - l_1 - P_3 = {}.csv'.format(p)) for p in p3_arr]

col = {name:i for i,name in enumerate(header)}

fig = plt.figure()
for data,color in Zip(outputs_l1, colors):
    xs  = data[:, col["l1"     ]]
    gl = data[:, col["G_left" ]] * 1000.0    # column 12
    gr = data[:, col["G_right"]] * 1000.0    # column 13
    plt.plot(xs, gl, color + "-", gr, color + "--")
for output, col in Zip(outputs_l1, colors):
    plt.plot(output[:,0], output[:,11]*1E3, col+'--')
plt.ticklabel_format(axis='both', style='plain', scilimits=(-1,1))
plt.xlabel('$l1 (m)$')
plt.ylabel('G $(J / m^2) * 10^{-3}$')
plt.xlim(xmin=.2)
plt.ylim(ymax=2, ymin=0)

plt.subplots_adjust(top=0.8, bottom=0.15, right=0.7)

プログラム全体を実行した後、私はエラーメッセージを受け取ります:

Traceback (most recent call last):
  File "C:/Users/Chris/Desktop/Work/Python Stuff/New Stuff from Brenday 8 26 2014/CD_ssa_plot(2).py", line 115, in <module>
    xs  = data[:, col["l1"     ]]
IndexError: too many indices for array

そして私がその問題に遭遇する前に、私は上記のエラーメッセージが参照しているものより少し下の行を含む別のものを持っていました:

Traceback (most recent call last): File "FILE", line 119, in <module> 
gl = data[:, col["G_left" ]] * 1000.0 # column 12 
IndexError: index 12 is out of bounds for axis 1 with size 12

私は最初のエラーを理解しました、しかしそれを直すのに問題があるだけです。 2番目のエラーは私を混乱させています。私の上司は本当に私の首を呼吸しているので、どんな助けでも大いに感謝されるでしょう!

50
Chris

問題を見つけるのはそれほど簡単ではありませんが、エラーメッセージに示されていると思います。

IndexError: too many indices for array
xs  = data[:, col["l1"     ]]

「インデックスが多すぎる」とは、インデックス値が多すぎることを意味します。データが2D配列であることを期待しているので、2つの値を与えました。 dataが2Dではない(1DまたはNone)ため、Numpyは不満を言っています。

これは少し推測です - あなたがloadfile()に渡すファイル名の1つが空のファイルを指しているのか、それとも間違ってフォーマットされているのか?もしそうであれば、1Dか空でさえある配列が返されるかもしれません(np.array(None)Errorをスローしないので、あなたは決して知りません...)。この失敗を防ぐには、loadfile関数にエラーチェックを挿入します。

forループに挿入することを強くお勧めします。

print(data)

これはPython 2.xまたは3.xで動作し、問題の原因を明らかにするかもしれません。問題を起こしているのはoutputs_l1リストの1つの値(つまり1つのファイル)だけであることがよくわかります。

46
J Richard Snape