Karena Anda sebenarnya menginginkan array yang berbeda di arr
mana arr < 255
, dan 255
sebaliknya, ini bisa dilakukan dengan mudah:
result = np.minimum(arr, 255)
Secara umum, untuk batas bawah dan / atau atas:
result = np.clip(arr, 0, 255)
Jika Anda hanya ingin mengakses nilai lebih dari 255, atau sesuatu yang lebih rumit, jawaban @ mtitan8 lebih umum, tetapi np.clip
dan np.minimum
(atau np.maximum
) lebih baik dan lebih cepat untuk kasus Anda:
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
Jika Anda ingin melakukannya di tempat (yaitu, memodifikasi arr
alih-alih membuat result
) Anda dapat menggunakan out
parameter np.minimum
:
np.minimum(arr, 255, out=arr)
atau
np.clip(arr, 0, 255, arr)
( out=
nama bersifat opsional karena argumen dalam urutan yang sama dengan definisi fungsi.)
Untuk modifikasi di tempat, pengindeksan boolean mempercepat banyak (tanpa harus membuat dan kemudian memodifikasi salinan secara terpisah), tetapi masih tidak secepat 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
Sebagai perbandingan, jika Anda ingin membatasi nilai Anda dengan minimum dan maksimum, tanpa clip
Anda harus melakukan ini dua kali, dengan sesuatu seperti
np.minimum(a, 255, a)
np.maximum(a, 0, a)
atau,
a[a>255] = 255
a[a<0] = 0