有沒有更好的方法來做到這一點?Pythonic方法來限制變量的範圍?
if a > 1:
a = 1
if a < 0:
a = 0
我想使用的功能,因爲我在我的代碼有很多的這些, 很好奇,如果有一個更短的理解的方式來做到這一點。
有沒有更好的方法來做到這一點?Pythonic方法來限制變量的範圍?
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
對(大)執行操作矩陣,例如,如果你要處理1000×1000矩陣,比使用numpy
一定會還清。
一個純Python的方法可以得到:
max(0,min(1,x))
但在這裏你有兩個電話,因此,它會比使用if
語句慢。
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
我總是
最後,如果你堅持使用if
-code,您可以通過使用elif
優化它一點點使用類似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
非常有用。謝謝! –