似乎我有一个错误的索引某处,但无法发现我

2024-09-30 04:33:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,在函数方面有困难。它应该删除(N,10)矩阵(从文件导入)中出现-1的行。这是密码 作为pd导入 将numpy作为np导入

def load(name, f):

    file = pd.read_csv(name,header=None)

    totalMatrix = np.array(file)

    if f == 'forward':

        for i in range(len(totalMatrix)):

            for j in range(10):

                if totalMatrix[i,j] ==-1: 

                    if i > 0:
                        totalMatrix[i,j]=totalMatrix[i-1,j]

                    else:
                        print("Warning")
                        f = 'drop'


    elif f == 'drop':

        for i in range(len(totalMatrix)): # or np.size(totalMatrix[:, 0])

            for j in range(10):

                if totalMatrix[i,j] == -1 : 

                    totalMatrix = np.delete(totalMatrix, (i), axis=0)


    t = totalMatrix[:, 0:6]
    d = totalMatrix[:, 6:11]

    return t, d

但我一直在说这个错误:

line 38, in load
if totalMatrix[i,j] == -1 :

IndexError: index 2 is out of bounds for axis 0 with size 2

我在网上找了好几个地方,但都找不到答案,我自己也找不到错误。有谁能看出来有什么问题告诉我吗?你知道吗


Tags: nameinforsizelenif错误np
1条回答
网友
1楼 · 发布于 2024-09-30 04:33:22

它不起作用,因为矩阵越来越小,而您继续基于旧的大小进行迭代,即,如果totalMatrix开头有3行,而您删除了其中一行,则最后一次迭代将尝试获取不存在的行。你知道吗

在矩阵上迭代时,收集要删除的索引。之后,您可以立即删除它们。你知道吗

 toDelete = []
 for i in range(len(totalMatrix)): # or np.size(totalMatrix[:, 0])
     for j in range(10):
         if totalMatrix[i,j] == -1 : 
             toDelete.append(i)
 totalMatrix = np.delete(totalMatrix, i, axis=0)

相关问题 更多 >

    热门问题