то что-то раньше не сталкивался с ними, только в универе, но там все руками делали
суть в том, что надо посчитать количесво элементов >= от указанной позиции
например
mtx = [
[1,3,3],
[1,2,2],
[1,3,2]
]
start_position = [1,1]
Ответ 2 так как стартовая центральная двойка и 4ре направления от нее и тройки больше
Как это можно красиво сделать?
кстати можно без numpy здесь, распаковать матрицу в одномерный список, взять слайс и кинуть в sum
справа еще двойка, а знак >=, почему она не учитывается?
извиняюсь меньше или равно стартовой позиции вот и подходит 1 и 2 слева и справа и вехр и низ тройки не подходят
Для работы с матрицами - numpy import numpy as np mtx = np.array([ [1, 3, 3, 4], [1, 2, 2, 0], [1, 3, 2, 7], [1, 4, 0, 3] ]) start_position = [1, 1] # Get value at start_pos position_value = mtx[start_position[0], start_position[1]] # Compare all elements of array to value at start_pos mtx = mtx <= position_value >> array([[ True, False, False, False], [ True, True, True, True], [ True, False, True, False], [ True, False, True, False]]) # Mask result mtx[:start_position[0], :] = False mtx[:, :start_position[1]] = False >> array([[False, False, False, False], [False, True, True, True], [False, False, True, False], [False, False, True, False]]) # Get sum of all "True" values output = np.sum(mtx) - 1 >> 4
>>> import numpy as np >>> arr = np.array([ ... [1, 3, 3, 4], ... [1, 2, 2, 0], ... [1, 3, 2, 7], ... [1, 4, 0, 3] ... ]) >>> arr[1:, 1:] array([[2, 2, 0], [3, 2, 7], [4, 0, 3]]) >>> np.sum(arr[1:, 1:]) 23 >>>
Обсуждают сегодня