যেহেতু আপনি প্রকৃতপক্ষে একটি আলাদা অ্যারে চান arr
যেখানে এটি রয়েছে arr < 255
এবং 255
অন্যথায় এটি সহজভাবে করা যেতে পারে:
result = np.minimum(arr, 255)
আরও সাধারণভাবে, নিম্ন এবং / বা উপরের সীমানার জন্য:
result = np.clip(arr, 0, 255)
আপনি যদি কেবল 255 এর বেশি মানগুলি বা আরও জটিল কিছু অ্যাক্সেস করতে চান তবে @ এমটিটান 8 এর উত্তরটি আরও সাধারণ, তবে 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=
ফাংশনটির সংজ্ঞা হিসাবে একই ক্রমে যুক্তি যুক্ত হওয়ার পরে নামটি alচ্ছিক)
ইন-প্লেস মডিফিকেশনের জন্য, বুলিয়ান ইনডেক্সিং প্রচুর গতি বাড়িয়েছে (অনুলিপিটি তৈরি করে আলাদাভাবে না করে আলাদাভাবে তৈরি করা), তবে এখনও তত দ্রুত নয় 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