我有以下代码:
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)。你能不能帮我解决问题。
答案 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文档或以前的问题来解决,而不是在堆栈上发布。