당신은 실제로 다른 배열을 원하기 때문에 , 그리고 그렇지 않으면,이 간단하게 할 수 있습니다 :arr
arr < 255
255
result = np.minimum(arr, 255)
보다 일반적으로, 하한 및 / 또는 상한의 경우 :
result = np.clip(arr, 0, 255)
그냥 더 복잡 255 값, 또는 무언가에 액세스하려면, @ mtitan8의 대답은 더 일반적이지만, np.clip
및 np.minimum
(또는 np.maximum
) 좋네요 훨씬 빨리 케이스 :
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
제자리에서 수행하려면 (즉, arr
대신에 수정 result
) out
매개 변수를 사용할 수 있습니다 np.minimum
.
np.minimum(arr, 255, out=arr)
또는
np.clip(arr, 0, 255, arr)
( out=
함수는 함수 정의와 동일한 순서로 인수되므로 선택 사항입니다.)
전체 수정의 경우 부울 색인 생성 속도가 빨라지지만 (복사본을 별도로 만든 다음 수정하지 않아도 됨) 여전히 다음과 같이 빠르지는 않습니다 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
비교를 위해 최소값과 최대 값으로 값을 제한 clip
하려면 다음과 같이 두 번 수행하지 않아도됩니다.
np.minimum(a, 255, a)
np.maximum(a, 0, a)
또는,
a[a>255] = 255
a[a<0] = 0