python, логический массив numpy: отрицание в операторе where

с:

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: Меня не волнует, изменяет ли оператор массив или нет. Мне просто нужен результат операции.

Еще один вопрос: я хочу внести это изменение по двум причинам: удобочитаемость и эффективность. Есть ли с ним реальное улучшение производительности? Еще раз спасибо

13
задан heapOverflow 14 February 2011 в 12:16
поделиться