IndexError:数组的索引太多 [英] IndexError: too many indices for array

查看:21
本文介绍了IndexError:数组的索引太多的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道有很多这样的线程,但它们都适用于非常简单的情况,比如 3x3 矩阵和类似的东西,而且这些解决方案甚至不适用于我的情况.所以我试图绘制 G 与 l1 的关系图(那不是 11,而是 L1).数据位于我从 excel 文件加载的文件中.excel 文件是 14x250,所以有 14 个参数,每个参数有 250 个数据点.我有另一个用户(向 Hugh Bothwell 大喊!)帮助我解决了代码中的错误,但现在又出现了另一个错误.

I know there is a ton of these threads but all of them are for very simple cases like 3x3 matrices and things of that sort and the solutions do not even begin to apply to my situation. So I'm trying to graph G versus l1 (that's not an eleven, but an L1). The data is in the file that I loaded from an excel file. The excel file is 14x250 so there are 14 arguments, each with 250 data points. I had another user (shout out to Hugh Bothwell!) help me with an error in my code, but now another error has surfaced.

这里是有问题的代码:

# 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)

运行整个程序后,我收到错误消息:

After running the entire program, I recieve the error message:

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

在我遇到那个问题之前,我有另一个涉及上面错误消息所指的那一行下面的几行:

and before I ran into that problem, I had another involving the line a few below the one the above error message refers to:

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

我理解第一个错误,但我在修复它时遇到了问题.不过,第二个错误让我感到困惑.我的老板真的在我的脖子上呼吸,所以任何帮助将不胜感激!

I understand the first error, but am just having problems fixing it. The second error is confusing for me though. My boss is really breathing down my neck so any help would be GREATLY appreciated!

推荐答案

我认为问题在错误信息中给出,虽然不是很容易发现:

I think the problem is given in the error message, although it is not very easy to spot:

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

索引过多"意味着您提供了过多的索引值.您已经给出了 2 个值,因为您希望数据是一个二维数组.Numpy 抱怨是因为 data 不是 2D(它是 1D 或 None).

'Too many indices' means you've given too many index values. You've given 2 values as you're expecting data to be a 2D array. Numpy is complaining because data is not 2D (it's either 1D or None).

这有点猜测 - 我想知道您传递给 loadfile() 的文件名之一是指向空文件还是格式错误的文件?如果是这样,你可能会得到一个返回的数组,它要么是一维的,要么是空的(np.array(None) 不会抛出 Error,所以你永远不会知道....).如果您想防止这种失败,您可以在 loadfile 函数中插入一些错误检查.

This is a bit of a guess - I wonder if one of the filenames you pass to loadfile() points to an empty file, or a badly formatted one? If so, you might get an array returned that is either 1D, or even empty (np.array(None) does not throw an Error, so you would never know...). If you want to guard against this failure, you can insert some error checking into your loadfile function.

我强烈推荐在你的 for 循环中插入:

I highly recommend in your for loop inserting:

print(data)

这将适用于 Python 2.x 或 3.x,并且可能会揭示问题的根源.您很可能会发现只有 outputs_l1 列表(即一个文件)中的一个值导致了问题.

This will work in Python 2.x or 3.x and might reveal the source of the issue. You might well find it is only one value of your outputs_l1 list (i.e. one file) that is giving the issue.

这篇关于IndexError:数组的索引太多的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆