Итак, я пишу sudoku solver, используя массив 9x9 для сетки и массив 9x9x9 для его возможностей. Из-за алгоритма обратного отслеживания, который я использую, я должен проверить, действительно ли Судоку действителен, ака:Numpy: сравнение истинности многомерных массивов
Если есть поле, которое не содержит числа и не имеет возможностей, верните False. До сих пор я Реализована следующим образом:
for j in range(9):
for i in range(9):
if puzzle[j,i] == 0 and (solving[j,i] == 0).sum() == 9:
return False
return True
Если квадрат в (J, I) содержится, например, варианты 2, 3 и 7, то по возможности массив будет:
solving[j,i] = array([0, 2, 3, 0, 0, 0, 7, 0, 0], dtype = int8)
Я стараюсь избегать таких циклов здесь и в другом месте моего решателя. Я попытался это следующим образом:
solving[where(puzzle == 0)]
Это возвратило п х 9 массива, где п количество пустых квадратов в моей головоломке. Я хочу, чтобы функция возвращала значение False, если какое-либо из п массивов с формой 1x9 точно равно
array([0,0,0,0,0,0,0,0,0], dtype = int8)
Однако, я не имел никакого успеха с различными попытками включая .any() и .Вс) экспериментами (. Это последний код, который я использовал:
def is_valid(self, puzzle, solving):
if (solving[py.where(puzzle == 0)].all() == 0).sum() > 0:
return False
return True
... который всегда возвращает False. Каков правильный способ кодирования этого?
Блестящий! И так просто :) Я думаю, что не понял, что делают np.all() и np.any(). Спасибо! – Epimetheus