Aslında arr
nerede olduğu farklı bir dizi istediğiniz arr < 255
ve 255
aksi takdirde, bu basitçe yapılabilir:
result = np.minimum(arr, 255)
Daha genel olarak, bir alt ve / veya üst sınır için:
result = np.clip(arr, 0, 255)
Sadece 255'in üzerindeki değerlere veya daha karmaşık bir şeye erişmek istiyorsanız, @ mtitan8'in cevabı daha geneldir, ancak np.clip
ve np.minimum
(veya np.maximum
) davanız için daha güzel ve çok daha hızlıdır:
In [292]: timeit np.minimum(a, 255)
100000 loops, best of 3: 19.6 µs per loop
In [293]: %%timeit
.....: c = np.copy(a)
.....: c[a>255] = 255
.....:
10000 loops, best of 3: 86.6 µs per loop
Yerinde yapmak (yani arr
oluşturmak yerine değiştirmek result
) istiyorsanız, şu out
parametreyi kullanabilirsiniz np.minimum
:
np.minimum(arr, 255, out=arr)
veya
np.clip(arr, 0, 255, arr)
( out=
işlev isteğe bağlı olarak aynı sırada yer alan bağımsız değişkenler olduğundan ad isteğe bağlıdır.)
Yerinde değişiklik için, boole endekslemesi çok hızlanır (kopyayı ayrı ayrı yapmak ve sonra değiştirmek zorunda kalmadan), ancak yine de şu kadar hızlı değildir minimum
:
In [328]: %%timeit
.....: a = np.random.randint(0, 300, (100,100))
.....: np.minimum(a, 255, a)
.....:
100000 loops, best of 3: 303 µs per loop
In [329]: %%timeit
.....: a = np.random.randint(0, 300, (100,100))
.....: a[a>255] = 255
.....:
100000 loops, best of 3: 356 µs per loop
Karşılaştırma için, değerlerinizi minimum ve maksimum değerlerle sınırlamak isterseniz, clip
bunu iki kez yapmak zorunda kalmazsınız,
np.minimum(a, 255, a)
np.maximum(a, 0, a)
veya,
a[a>255] = 255
a[a<0] = 0