"перевернуть" значения в массиве numpy? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть список чисел в диапазоне от 1 до. N Я хочу «перевернуть» некоторые числа, но он не должен повторять ни одно из существующих чисел.

Я представляю это так:

  1. выберите номера для переворачивания
  2. переверните их, но убедитесь, что они не повторяются

Вот шаг 1:

  lst = np.array([5,9,88,55,90,43])
 In [95]: z = np.random.choice(lst, 2,replace=False)
 Out[95]: array([ 9, 43])

    ixs = np.where(lst == z)[0]
    #does not guarantee that the new numbers are not already in lst!
    lst[ixs] = np.random.choice(xrange(0,n),2,replace=False)

Теперь, как мне убедиться, что новые случайные числа не повторяются без проверок в al oop.

Любой другой способ numpy?


Изменение среднего значения от одного значения другому. Вы можете рассматривать список чисел как индексы для битовой матрицы, где число указывает, равен ли бит 1.

Таким образом, переворачивание означает, что для каждого переворота 1 => 0, перебрасывать другой бит из 0 => 1

in: np.array ([5,9,88,55,90,43]) out: np.array ([5,9,46,55,21,43])

два номера были изменены

1 Ответ

1 голос
/ 04 мая 2020

Вы можете использовать наборы.

s = set(xrange(0, n))

lst[ixs] = np.random.choice(s.difference(lst), 2, replace=False)

Можно поспорить, если это намного эффективнее, но, безусловно, чище.

...