在numpy的python中出现"IndexError: too many indices"错误

4

我知道很多人都问过这个问题,但是我没有得到一个能解决我的问题的恰当答案。

我有一个数组 X:

    X=
    [1. 2. -10.]

现在我正在尝试使用此X数组创建矩阵Y。我的代码如下:
#   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行。如果我用两行或更多行创建数组X,则不会出现任何错误。只有当X数组有1行时才会出现错误。现在,在我的情况下,数组X可以具有任意数量的行。它可以有1行、5行或100行。我想编写一段代码,可以在不出错的情况下读取具有任意行数的数组X。如何解决这个问题?

提前致谢...


1
听起来当你说“1行”时,实际上是指它根本没有“行”这个维度。你能否更改你的代码使其具有该维度? - user2357112
1个回答

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 的提醒,如果您想使用numpy数组算术,请使用np.atleast_2d

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

2
或者,如果您不想要np.matrix的附加行为(例如*执行矩阵乘法),只需使用x = np.atleast_2d(x) - askewchan
@askewchan 谢谢!我很少使用那个,所以忘记了...已经更新了 ;) - zhangxaochen
啊哈...谢谢。我刚把NumPy数组X转换成了NumPy矩阵X。现在它可以正常工作了。 - Nafees

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接