numpy python中的“IndexError:索引太多了”

时间:2014-03-01 01:29:17

标签: python arrays numpy indexing

我知道很多人都会问这个问题,但我找不到可以解决问题的合适答案。

我有一个数组X ::

    X=
    [1. 2. -10.]

现在我正在尝试使用矩阵Y读取此X数组。我的代码是::

#   make Y matrix

Y=np.matrix(np.zeros((len(X),2)))
i=0

while i < len(load_value):
    if X[i,1] % 2 != 0:
        Y[i,0] = X[i,0]*2-1
    elif X[i,1] % 2 == 0:
        Y[i,0] = X[i,0] * 2
    Y[i,1] = X[i,2]
    i = i + 1
print('Y=')
print(Y)

现在如果我运行它,它会给出以下错误::

    Traceback (most recent call last):
      File "C:\Users\User\Desktop\Code.py", line 251, in <module>
        if X[i,1] % 2 != 0:
    IndexError: too many indices

这里,我的数组只有1行。如果我使用2行或更多行创建数组X,它不会给我任何错误。只有当X数组有1行时,它才会给出错误。现在,就我而言,数组X可以有任意数量的行。它可以有1行或5行或100行。我想编写一个代码,可以读取任意数量的行X而没有任何错误。我该如何解决这个问题?

提前致谢....

1 个答案:

答案 0 :(得分:6)

我建议使用numpy.matrix代替ndarray,无论您拥有多少行,它都会保留2的维度:

In [17]: x
Out[17]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [18]: m=np.asmatrix(x)

In [19]: m[1]
Out[19]: matrix([[3, 4, 5]])

In [20]: m[1][0, 1]
Out[20]: 4

In [21]: x[1][0, 1]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-21-bef99eb03402> in <module>()
----> 1 x[1][0, 1]

IndexError: too many indices

对于@askewchan提及的thx,如果你想使用numpy数组算法,请使用np.atleast_2d

In [85]: np.atleast_2d(x[1])[0, 1]
Out[85]: 4