限制变量范围的Pythonic方法?
Pythonic way to limit ranges on a variable?
有更好的方法吗?
if a > 1:
a = 1
if a < 0:
a = 0
我正在考虑使用一个函数,因为我的代码中有很多这样的函数,
很好奇是否有更简短易懂的方法来做到这一点。
您所描述的通常称为剪辑。有几种方法可以进行裁剪。
图书馆(numpy
)
你可以使用 numpy.clip
:
numpy.clip(a, a_min, a_max, out=None)
所以:
import numpy
numpy.clip(x,0,1)
虽然Python中的函数调用开销很大,而且numpy
通常是批量处理数据,但是对于单个值会导致计算开销。
例如:
>>> x = -2.5
>>> numpy.clip(x,0,1)
0.0
>>> x = 2.5
>>> numpy.clip(x,0,1)
1.0
>>> x = 0.5
>>> numpy.clip(x,0,1)
0.5
通常您使用 numpy
对(大)矩阵执行 操作 ,例如,如果您必须处理 1000x1000 矩阵,则使用 numpy
一定会有回报的。
纯粹Python
纯python方法可以通过以下方式获得:
max(0,min(1,x))
但是这里你有 两次调用,因此,它会比使用 if
语句慢。
最后,如果您坚持使用 if
代码,您可以使用 elif
:
稍微优化一下
if x < 0:
x = 0
elif x > 1:
x = 1
或更通用的函数:
def clip(x,min,max):
if x < min:
return min
elif x > max:
return max
return x
我总是使用 max(0, min(1, x))
之类的东西。
如果 x 大于 1,则 min(1, x)
将为 1,而 max(0, 1)
仍为 1。
如果 x 小于 0,min(1, x)
将是 x
,而 max(0, x)
将是 0。
有更好的方法吗?
if a > 1:
a = 1
if a < 0:
a = 0
我正在考虑使用一个函数,因为我的代码中有很多这样的函数, 很好奇是否有更简短易懂的方法来做到这一点。
您所描述的通常称为剪辑。有几种方法可以进行裁剪。
图书馆(numpy
)
你可以使用 numpy.clip
:
numpy.clip(a, a_min, a_max, out=None)
所以:
import numpy
numpy.clip(x,0,1)
虽然Python中的函数调用开销很大,而且numpy
通常是批量处理数据,但是对于单个值会导致计算开销。
例如:
>>> x = -2.5
>>> numpy.clip(x,0,1)
0.0
>>> x = 2.5
>>> numpy.clip(x,0,1)
1.0
>>> x = 0.5
>>> numpy.clip(x,0,1)
0.5
通常您使用 numpy
对(大)矩阵执行 操作 ,例如,如果您必须处理 1000x1000 矩阵,则使用 numpy
一定会有回报的。
纯粹Python
纯python方法可以通过以下方式获得:
max(0,min(1,x))
但是这里你有 两次调用,因此,它会比使用 if
语句慢。
最后,如果您坚持使用 if
代码,您可以使用 elif
:
if x < 0:
x = 0
elif x > 1:
x = 1
或更通用的函数:
def clip(x,min,max):
if x < min:
return min
elif x > max:
return max
return x
我总是使用 max(0, min(1, x))
之类的东西。
如果 x 大于 1,则 min(1, x)
将为 1,而 max(0, 1)
仍为 1。
如果 x 小于 0,min(1, x)
将是 x
,而 max(0, x)
将是 0。