с:
import numpy as np
array = get_array()
Мне нужно сделать следующее:
for i in range(len(array)):
if random.uniform(0, 1) < prob:
array[i] = not array[i]
с массивом, представляющим собой numpy.array.
Хотелось бы сделать что-то похожее на:
array = np.where(np.random.rand(len(array)) < prob, not array, array)
но я получаю следующий результат (ссылаясь на 'not array'):
Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()
Почему я могу принять значение массива, но не его отрицание?
В настоящее время я решил с помощью:
array = np.where(np.random.rand(len(array)) < prob, - array + 1, array)
но мне это кажется очень неуклюжим.
Спасибо за вашу помощь
p.s .: Мне все равно, изменяет ли оператор массив или нет. Мне просто нужен результат операции.
просто еще один вопрос: я хочу сделать это изменение по двум причинам: удобочитаемость и эффективность. Есть ли реальное улучшение производительности с ним? Еще раз спасибо