I have the following input:
R = 'r' _ = 'g' grid = [ [_,_,_], [_,R,_], [_,_,_] ] p = 1.0 / 9 initial_beliefs = [ [p,p,p], [p,p,p], [p,p,p] ] observation = R #result expected_beliefs_after = [ [1/11, 1/11, 1/11], [1/11, 3/11, 1/11], [1/11, 1/11, 1/11] ] p_hit = 3.0 p_miss = 1.0
Out of this I wrote for a course the following code:
def sense(color, grid, beliefs, p_hit, p_miss): #Calculate height & width height = len(beliefs) width = len(beliefs[0]) #Generate new grid new_beliefs = [[0.0 for i in range(width)] for j in range(height)] #Variable for sum s = 0 #New beliefs for i, row in enumerate(beliefs): for j, cell in enumerate(row): hit = (color == grid[i][j]) new_cell = beliefs[i][j] * (hit * p_hit + (1-hit) * p_miss) new_beliefs[i][j] = new_cell #Sum new beliefs for normalization s = s + sum(new_beliefs[i]) #Update new beliefs after normalization for i, row in enumerate(new_beliefs): for j, cell in enumerate(row): new_beliefs[i][j] = new_beliefs[i][j] / s return new_beliefs
My code works perfectly fine, but I am a bit unsecure about the DRY principle. Would you consider this as good coded, or do you have any suggestions how to improve my code? Note: the input is given from my course, and this I just posted that you can see what’s given to the function.
Thanks a lot, Marc