if(data [i,1] == 1):IndexError:索引869超出了0的大小为869的范围

时间:2015-10-26 21:30:27

标签: python numpy import

我有以下代码:

def findingGroups(data,i=0):
findingGroupsMatrix1=np.zeros(1)
findingGroupsMatrix2=np.zeros(1)
findingGroupsMatrix3=np.zeros(1)
findingGroupsMatrix4=np.zeros(1)
z=np.zeros(1)
print ("i",i)
while True:

    if (data[i,1] == 1):
        z[0]=i
        findingGroupsMatrix1=np.append(findingGroupsMatrix1,z,axis=0)

    elif data[i,1] == 2:
        z[0]=i
        findingGroupsMatrix2=np.append(findingGroupsMatrix2,z,axis=0)

    elif data[i,1] == 3:
        z[0]=i
        findingGroupsMatrix3=np.append(findingGroupsMatrix3,z,axis=0)

    elif data[i,1] == 4:
        z[0]=i
        findingGroupsMatrix4=np.append(findingGroupsMatrix4,z,axis=0)
    elif i == len(data):
        break
    i=i+1

这就是错误:if (data[i,1] == 1): IndexError: index 869 is out of bounds for axis 0 with size 869

数据是numpy.ndarray和shape(869,10)。你能不能帮我解决问题。

3 个答案:

答案 0 :(得分:1)

如果形状为(869,10),则第一个下标从0-868开始。您的循环控制有问题。既然您知道循环的次数,请使用“for”。在你为时已晚的情况下检查你的循环。

testing <- function(x){
       lapply(seq_along(x), function(i) {x[[i]][,2] <- 88
                                     x[[i]]})}
testing(list)
#[[1]]
#     [,1] [,2] [,3]
#[1,]    1   88    7
#[2,]    2   88    8
#[3,]    3   88    9

#[[2]]
#     [,1] [,2] [,3]
#[1,]    2   88    8
#[2,]    3   88    9
#[3,]    4   88   10

你不必再增加我了。

另请注意,如果第二个元素不在1-4范围内,则只检查索引。这也可能导致你的循环失败。

答案 1 :(得分:0)

如果数组的形状为(869, 10),则对象中的最大索引为(868, 9)(因为索引从0开始,这与python序列一样)。

答案 2 :(得分:0)

python零索引。这意味着869元素数组的“first”元素为0,最后一个元素为868.因此,引用869将失败。下次使用搜索功能;这个问题可以通过简单地查看python文档或以前的问题来解决,而不是在堆栈上发布。