2017-06-15 62 views
3

有沒有更好的方法來做到這一點?Pythonic方法來限制變量的範圍?

if a > 1: 
    a = 1 
if a < 0: 
    a = 0 

我想使用的功能,因爲我在我的代碼有很多的這些, 很好奇,如果有一個更短的理解的方式來做到這一點。

回答

8

你所描述的通常被稱爲剪報。有幾種方法可以進行裁剪。

庫(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

一個純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 
+2

非常有用。謝謝! –

4

我總是

最後,如果你堅持使用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