включает в себя замену отрицательных значений в массиве
может ли кто-нибудь посоветовать простой способ замены всех отрицательных значений в массиве на 0?
у меня есть полный блок о том, как это сделать с помощью массива numpy
например
a = array([1, 2, 3, -4, 5])
мне нужно вернуть
[1, 2, 3, 0, 5]
a < 0 выдает:
[False, False, False, True, False]
вот где я застрял - как использовать этот массив для изменения исходного массива
5 ответов:
попробовать
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для простых операций, потому что это самодокументирование, но его ответ предпочтительнее для более сложных операций.
еще одно минималистское решение 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]
и еще одна возможность:
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]
Comments