Я использую упражнения CodeSignal для изучения программирования, так что здесь все в порядке. У меня есть массив 2d numpy (называемый matrix ) (хотя не обязательно должен быть numpy, если для этого существует какая-либо лучшая структура), и 2 для циклов, которые через l oop каждый элемент в матрице, проверяя, соответствует ли он какому-либо условию. Я создал массив np.zeros того же размера, что и матрица ввода (называемая result ), которая будет заполнена моим результатом.
Вернуться к циклам for. Когда условие выполняется для данного элемента с индексами i, j, равными matrix , я хочу, чтобы программа идентифицировала все соседние элементы и добавила 1 к каждому из них.
Так, например, если
matrix = [[True, False, False],
[False, False, False],
[False, False, False]]
Тогда
result = [[0, 1, 0],
[1, 1, 0],
[0, 0, 0]]
Что у меня сейчас:
matrix = np.array(matrix)
(row, col) = matrix.shape
result = np.zeros((row,col), dtype=int)
for i in range(0, row):
for j in range(0, col):
print(i,j)
if matrix[i,j] == True:
matrix[i-1:i+2, j-1:j+2] += 1 ##problem
return result
Проблема со строкой у меня указано, конечно, это не работает, если элемент находится на границе, так как нет i-1 или i + 2 et c .. (я пытался, нет сообщения об ошибке, он просто не выполняет какую-либо функцию на матрица нулей). Я мог бы написать кучу операторов if, например, если i == 0 или j == 0 или i == row или j == col, и указать отдельные срезы для каждого, но должен быть способ проще, чем тот, который я не могу думать или найти.
Заранее спасибо за помощь.