阻止数字变为负值的简单方法
Simple way to stop a number going negative
我有一个简单的练习。我需要彼此减去 2 个元组,但我不希望结果变为负数,我想在 0 处停止。同样我想添加 2 个元组,但我想将值的上限限制为 255。
所以当我执行 (1,1,1)-(5,200,30)
时,我应该得到结果 (0,0,0)
。如果我这样做 (200,10,150)+(90,20,50)
我应该得到 (255,30,200)
.
math
或 numpy
中是否有任何方便的函数可以做到这一点?
在 numpy
中检查 clip
np.clip(np.array((1,1,1))-np.array((5,200,30)),a_min=0,a_max=255)
Out[186]: array([0, 0, 0])
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)
你可以做一些事情,比如选择最大值(结果或 0)。这样,如果结果是否定的,它将 return 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)]
一种纯粹的 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)
我有一个简单的练习。我需要彼此减去 2 个元组,但我不希望结果变为负数,我想在 0 处停止。同样我想添加 2 个元组,但我想将值的上限限制为 255。
所以当我执行 (1,1,1)-(5,200,30)
时,我应该得到结果 (0,0,0)
。如果我这样做 (200,10,150)+(90,20,50)
我应该得到 (255,30,200)
.
math
或 numpy
中是否有任何方便的函数可以做到这一点?
在 numpy
clip
np.clip(np.array((1,1,1))-np.array((5,200,30)),a_min=0,a_max=255)
Out[186]: array([0, 0, 0])
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)
你可以做一些事情,比如选择最大值(结果或 0)。这样,如果结果是否定的,它将 return 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)]
一种纯粹的 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)