Python,将n乘m的numpy数组与n大小的numpy阵列进行比较



我正在做一个编程项目,由于某种原因,我陷入了困境。

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乘m数组中的每一个值,最终我想打印不在gradeList的n乘m阵列中的等级的位置。我得到以下错误代码:

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. ]])

我认为问题就在那里:

# 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](三次(。

您已经交换了i1i2的定义,这会导致出现错误。以下是如何修复您的代码:

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]

而CCD_ 14将省略最后一个索引:

[0, 1, 2, 3, 4, 5]

相关内容

  • 没有找到相关文章

最新更新