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