猿问

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


回首忆惘然
浏览 214回答 2
2回答

qq_花开花谢_0

您已经交换了i1and的定义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)在您的原始代码中。thegrades.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]

素胚勾勒不出你

我认为问题出在那里:# 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]地方出现(三次)。
随时随地看视频慕课网APP

相关分类

Python
我要回答