с:
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.: Меня не волнует, изменяет ли оператор массив или нет. Мне просто нужен результат операции.
Еще один вопрос: я хочу сделать это изменение по двум причинам: читаемость и эффективность. Есть ли реальное улучшение производительности? Еще раз спасибо