我正在做一个编程项目,由于某种原因,我很难坚持。
gradeList = [-3,0,2,4,7,10,12]
for i1 in range(np.size(grades,1)-1):
for i2 in range(np.size(grades,0)-1):
for i3 in range(len(gradeList)-1):
if grades[i1,i2] != gradeList[i3]:
print(grades[i1,i2])
print(i1,i2,i3)
print("This is an error"+str(grades[i1,i2]))
else:
print("FINE")
我试图检查我的gradeList中每个值的n x m数组中的每个值,最终我想打印n * m数组中不在gradeList中的成绩的位置。我收到以下错误代码:
IndexError: index 3 is out of bounds for axis 1 with size 3
我的成绩数组:
grades = np.array([[ 7. 7. 4. ],[ 12. 10. 10. ],[ -3. 7. 2. ],[ 10. 12. 12. ],[ 12. 12. 12. ],[ 10. 12. 12. ],[ -3.8 2.2 11. ],[ 20. 12.6 100. ],[ 4. -3. 7. ],[ 10. 10. 10. ],[ 4. -3. 7. ],[ 10. 10. 10. ],[ 10. 10. 10. ],[ 12. 12. 12. ],[ -3. -3. -3. ],[ 20. 12.6 100. ]])
答案 0 :(得分:0)
您已经交换了i1
和i2
的定义,这将导致出现错误。修正程式码的方法如下:
for i1 in range(grades.shape[0]):
for i2 in range(grades.shape[1]):
for i3 in range(len(gradeList)):
if grades[i1,i2] != gradeList[i3]:
print(grades[i1,i2])
print(i1,i2,i3)
print("This is an error"+str(grades[i1,i2]))
else:
print("FINE")
在上面的代码中,grades.shape[0]
与原始代码中的np.size(grades, 0)
等效。 grades.shape[0]
是最常用的习惯用法。
此外,我从范围的定义中删除了所有-1
调整项。如果那里有那些,它将防止循环到达数组中的最后一个值。 range
的行为是它将在达到您设置的最大值之前停止一个值。
例如,list(range(len(gradeList)))
将返回gradeList
的完整索引集:
[0, 1, 2, 3, 4, 5, 6]
而list(range(len(gradeList - 1)))
将省略最后一个索引:
[0, 1, 2, 3, 4, 5]
答案 1 :(得分:0)
我认为问题出在那儿
# i1 => [0,1]
# i2 => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# i3 => [0, 1, 2, 3, 4, 5]
调用grades[i1,i2]
时可以拥有grades[0,3]
及其边界,因为该轴具有三个元素。
我猜解决方案是将grades[i1,i2]
更改为grades[i2,i1]
出现的位置(三次)。