以下函数放在for循环中,因为for循环索引可以得到高负值,如下例所示:
C_ki [2] [1] = max(C_ki [1] [1],C_ki [3] [ - 7],C_ki [2] [0])…
你可以将提取包装在一个函数中,
def get_or_zero(array, i, j): try: return array[i][j] except IndexError: return 0
然后你可以使用 get_or_zero(C_ki, i, j) 代替 C_ki[i][j] 在最大功能。
get_or_zero(C_ki, i, j)
C_ki[i][j]
注意:您收到索引错误,因为列表索引超出范围(C_ki [3] [ - 7])
你的C_ki有维度[3] [7],索引从0开始计数到2. 3超出范围。
注意:负面索引发生了什么:
例:
array = [0,1,2,3,4,5] print (array[-1]) # equal array[5]
结果:5
十分之九是最好用索引解决问题,但假设这是第10次,内置的min,max函数可以组合起来,为您提供所需的保护:
# legal value, no change required I= 2 D=(min(max(I,0),4)) # D will equal 2 # large negative set to zero I= -7 D=(min(max(I,0),4)) # D will zero 0 # large positive set to the value of the maximum of 4 I= 7 D=(min(max(I,0),4)) # D will equal 4