Проверить, нет ли какого-либо элемента массива numpy в списке? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть небольшой список:

moveless = [0,11,30,31,20,21,22,23,24,25,26,27,28,29]

И, например, такой массив (он всегда будет вложен в подобный список, но часто будет десятки / сотни тысячих, и любое число от -1 до 31 может быть в любом месте):

starting_board = [([[ 6, -1, -1,  11, 0,  11, -1,  -1,  -1, -1],
       [-1, -1, -1, -1, -1, -1, -1,  11, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, 1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, 2],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, 20, 31, -1, 25, -1, -1, -1]])]

И мне нужно определить, находятся ли какие-либо элементы этого массива в неподвижном.Так что, если он проанализировал его и добрался до 6, он мог бы остановиться.

Я чувствую, что должен быть более быстрый и более элегантный / pythonic способ сделать это, чем просто пара для циклов, но моя проверка через numpyДокументы / где-либо еще на этом сайте не обнаружили ничего страшного.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Использование isin ()

starting_board = [([[ 6, -1, -1,  11, 0,  11, -1,  -1,  -1, -1],
       [-1, -1, -1, -1, -1, -1, -1,  11, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, 1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, 2],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, 20, 31, -1, 25, -1, -1, -1]])]
moveless = [0,11,30,31,20,21,22,23,24,25,26,27,28,29]
print(np.isin(starting_board, moveless))

Вывод:

[[[False False False  True  True  True False False False False]
  [False False False False False False False  True False False]
  [False False False False False False False False False False]
  [False False False False False False False False False False]
  [False False False False False False False False False False]
  [False False False False False False False False False False]
  [False False False False False False False False False False]
  [False False False  True  True False  True False False False]]]
0 голосов
/ 26 ноября 2018

Если все, что вам нужно знать, это если каких-либо элементов нет в списке, просто сделайте сравнение наборов:

any_items_not_in_moveless = {element for row in starting_board[0] for element in row} - set(moveless)
# OR
any_items_not_in_moveless = set(np.asarray(starting_board[0]).ravel()) - set(moveless)

Как указывает @Chirag, вы могли бытакже использовать функцию Numpy isin.Какое решение быстрее / лучше для вас - это то, что вам нужно выяснить для собственного случая:

any_items_not_in_moveless = (~np.asarray(starting_board[0]).isin(moveless)).any()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...