Попробуйте numpy.clip
:
>>> import numpy
>>> a = numpy.arange(-10, 10)
>>> a
array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9])
>>> a.clip(0, 10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Вы можете закрепить только нижнюю половину clip(0)
.
>>> a = numpy.array([1, 2, 3, -4, 5])
>>> a.clip(0)
array([1, 2, 3, 0, 5])
Вы можете закрепить только верхнюю половину clip(max=n)
. (Это намного лучше, чем мое предыдущее предложение, которое включало переход NaN
к первому параметру и использование out
для приведения типа.):
>>> a.clip(max=2)
array([ 1, 2, 2, -4, 2])
Еще один интересный подход - использовать where
:
>>> numpy.where(a <= 2, a, 2)
array([ 1, 2, 2, -4, 2])
Наконец, рассмотрим ответ aix . Я предпочитаю clip
простые операции, потому что он самодокументируется, но его ответ предпочтительнее для более сложных операций.
numpy
? Пробовали ли вы клип метод изa
? Встроенная функцияnumpy.clip
выдает ту же ошибку, а метод - нет.Еще одно минималистичное решение Python без использования numpy:
[0 if i < 0 else i for i in a]
Нет необходимости определять какие-либо дополнительные функции.
a = [1, 2, 3, -4, -5.23, 6] [0 if i < 0 else i for i in a]
дает:
[1, 2, 3, 0, 0, 6]
источник
for
применяет его к каждому элементу списка, помещая его после, означает, что только если условие выполнено, оно попадает в результирующий список.i < 0 ? 0 : i
в C) внутри понимания списка. Поставьте скобки, чтобы было понятнее[(0 if i < 0 else i) for i in a]
. Установка if после использует фильтрующую часть конструкции выражения списка.[(i) for i in a if i < 0]
вернет только список элементов меньше нуля.И еще одна возможность:
In [2]: a = array([1, 2, 3, -4, 5]) In [3]: where(a<0, 0, a) Out[3]: array([1, 2, 3, 0, 5])
источник
Вот способ сделать это на Python без NumPy. Создайте функцию, которая возвращает то, что вы хотите, и используйте понимание списка или функцию карты .
>>> a = [1, 2, 3, -4, 5] >>> def zero_if_negative(x): ... if x < 0: ... return 0 ... return x ... >>> [zero_if_negative(x) for x in a] [1, 2, 3, 0, 5] >>> map(zero_if_negative, a) [1, 2, 3, 0, 5]
источник