IndexError:数组索引太多

我知道有很多这些线程,但所有这些都是非常简单的情况下,如3x3matrix和这样的事情,解决scheme甚至不适用于我的情况。 所以我试图把G和L1(这不是十一,而是L1)。 数据在我从excel文件中加载的文件中。 excel文件是14×250,所以有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 

我理解第一个错误,但是只是在解决它的问题。 第二个错误虽然让我感到困惑。 我的老板真的非常感激我的脖子,所以任何帮助将非常感激!

我认为这个问题是在错误信息中给出的,尽pipe发现并不是很容易:

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

“太多索引”意味着你给了太多索引值。 你已经给出了2个值,因为你期望数据是一个二维数组。 Numpy抱怨,因为data不是2D(它可能是一维或无)。

这是一个猜测 – 我不知道你传递给loadfile()的文件名是否指向一个空文件,或者格式不正确? 如果是这样,你可能会得到一个数组返回,是1D,甚至空( np.array(None)不会抛出一个Error ,所以你永远不会知道…)。 如果你想防范这个失败,你可以在你的loadfile函数中插入一些错误检查。

我强烈build议你在for循环插入:

 print(data) 

这将在Python 2.x或3.x中工作,并可能揭示问题的根源。 你可能会发现它只是你的outputs_l1列表中的一个值(即一个文件),正在给出这个问题。