с:
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)
, но я получаю следующее результат (имеется в виду «не массив»):
Истинное значение массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()
Почему я могу брать значение массива, но не его отрицание?
В настоящее время я решил с помощью:
array = np.where(np.random.rand(len(array)) < prob, - array + 1, array)
, но мне это кажется очень неуклюжим.
Спасибо за вашу помощь
ps: Меня не волнует, изменяет ли оператор массив или нет. Мне просто нужен результат операции.
Еще один вопрос: я хочу внести это изменение по двум причинам: удобочитаемость и эффективность. Есть ли с ним реальное улучшение производительности? Еще раз спасибо