Удалить определенные значения из массива numpy при определенных условиях - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть такой массив номеров:

answer = [1, 0, 1, 0, 2, 1, 0...,1, 1, 0,] # of size m

каждая запись ответа представляет собой цифру от 0 до 2.

У меня есть еще один массив таких слов:

remains_doors = [ [0,2], [0,1], [1,2], ... [1,2], [0,1],] # of size m

каждая запись Остатка_состояния представляет собой список из 2 чисел от 0 до 2. Числа не могут быть одинаковыми.

Мне нужно создать новый массив, названный new_array, из answer и Остатки_двора сследующие критерии: для каждого набора я должен сохранить соответствующие данные, которые не находятся в ответе, или, если данные отсутствуют, выбрать случайное значение.Например:

answer        = [1, 0, 1, 2, 1 ,0]
remains_doors = [ [0,1], [1,2], [0,1], [2,0], [1,0], [0,1]]

new_array = [0, 2, 0, 0, 0, 1]

Сложность в том, что для этого я не должен использовать какие-либо циклы (для, в то время как).(для вашей информации, это является частью месячной проблемы зала)

Ответы [ 2 ]

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

Если вам не разрешено использовать любой цикл for или while, может быть подойдет рекурсия?

answer        = [1, 0, 1, 2, 1 ,0]
remains_doors = [[0,1], [1,2], [0,1], [2,0], [1,0], [0,1]]
new_array = [0, 2, 0, 0, 0, 1]

import random

def do_the_job(answer, doors, idx = 0, new_array = []):
  end = len(answer)
  if idx < 0 or idx >= end:
    return
  a = answer[idx]
  d = doors[idx]
  if a in d:
    d.remove(a)
    new_array.append(d[0])
  else: new_array.append(random.sample(d, 1)[0])
  do_the_job(answer, doors, idx + 1, new_array)
  return new_array

print(do_the_job(answer, remains_doors))
#=> [0, 2, 0, 0, 0, 1] or sometimes [0, 1, 0, 0, 0, 1]
0 голосов
/ 28 ноября 2018

Просмотрите документацию для команды zip, а также найдите информацию о списках в python.

Рассматривая ваш вопрос о второй позиции, которую вы набрали 0 по сравнению с [1,2], ваш ответдля этого 2 так:

new_array = [max(z for z in y if z != x) for x,y in zip(answer,remains_doors)]

Если вы хотите [1,2], а не просто 2, тогда удалите вызов max.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...