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

时间:2017-06-16 22:11:08

标签: python python-3.x numpy

我是python的新手并且遇到了函数问题。它应该删除一个(N,10)矩阵(从文件导入)的行,其中出现-1。这是代码 将pandas导入为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

我试图在互联网上查看几个地方,但找不到答案,我也不能自己找到错误。任何人都可以看到有什么问题并告诉我吗?

1 个答案:

答案 0 :(得分:0)

它不起作用,因为矩阵越来越小,你继续根据旧的大小进行迭代,即如果totalMatrix在开头有3行而你删除了一行,那么最后一次迭代将试图获得一个不存在的行。

在迭代Matrix时,收集要删除的索引。之后,您可以立即删除它们。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@android:id/background"
        android:height="5dp"
        android:gravity="center">
        <shape android:shape="rectangle">
            <solid android:color="@color/seekbar_background" />
            <corners android:radius="2.5dp" />
        </shape>
    </item>

    <item
        android:id="@android:id/progress"
        android:height="10dp"
        android:gravity="center">
        <clip>
            <shape android:shape="rectangle">
                <solid android:color="@color/seekbar_progress" />
                <corners android:radius="5dp" />
            </shape>
        </clip>
    </item>

</layer-list>