Простой способ остановить отрицательное число - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть простое упражнение.Мне нужно минус 2 кортежа друг от друга, но я не хочу, чтобы результат становился отрицательным, я хочу остановиться на 0. Аналогично, я хочу добавить 2 кортежа, но я хочу ограничить верхнее значение 255.

Поэтому, когда я делаю (1,1,1)-(5,200,30), я должен получить результат (0,0,0).И если я сделаю (200,10,150)+(90,20,50), я получу (255,30,200).

Есть ли в math или numpy какие-либо вспомогательные функции, которые могут это сделать?

Ответы [ 4 ]

2 голосов
/ 24 апреля 2019

Вы можете сделать что-то вроде выбора max (результат или 0).Таким образом, если результат отрицательный, он вернет 0Например:

t1 = (1,1,1)
t2 = (5, 200, 30)

для вычитания

[max(x[0]-x[1], 0) for x in zip(t1, t2)]

для сложения

[min(x[0]+x[1], 255) for x in zip(t1, t2)]
2 голосов
/ 24 апреля 2019

Чек clip в numpy

np.clip(np.array((1,1,1))-np.array((5,200,30)),a_min=0,a_max=255)
Out[186]: array([0, 0, 0])
0 голосов
/ 24 апреля 2019

Чистый способ Python обрезать значения будет следующим:

>>> x = (25, 400, 30) 
>>> tuple(map(min, zip(x, (255,255,255))))
(25, 255, 30)

Аналогично для нижнего предела:

>>> x = (25, -20, 30) 
>>> tuple(map(max, zip(x, (0,0,0))))
(25, 0, 30)
0 голосов
/ 24 апреля 2019
def add(t1,t2):
    """
    input: t1,t2 are tuples.
    example t1(1,2,3) t2(7,8,9)
    result=(a=1+7,b=2+8,c=3+9)
    max of a, b, and c are 255
    """
    a=t1[0]+t2[0]
    b=t1[1]+t2[1]
    c=t1[2]+t2[2]
    if(a>255):
        a=255
    if(b>255):
        b=255
    if(c>255):
        c=255
    result=(a,b,c)
    return result

#CALLING
x=(1,1,1)
y=(5,200,30)
z=(200,10,150)
t=(90,20,50)


print(add(z,t))
(255, 30, 200)
...