অন্য উত্তরটি যেমন বলেছে, আপনি যদি সত্যই / মিথ্যা মূল্যায়নের সুবিধা গ্রহণ করতে পারেন তবে আপনি যদি জানেন যে 0সম্ভবত আপনার অ্যারেতে এটিই একমাত্র ফালসি উপাদান। অ্যারেতে থাকা সমস্ত উপাদানগুলি মিথ্যা হয় যদি এর মধ্যে কোনও সত্য উপাদান থাকে না *
>>> a = np.zeros(10)
>>> not np.any(a)
True
তবে উত্তরটি দাবি করেছে যে anyআংশিকভাবে শর্ট সার্কিট করার কারণে অন্যান্য বিকল্পের চেয়ে দ্রুত ছিল। 2018 হিসাবে, নম্পি allএবং any শর্ট সার্কিট করবেন না ।
আপনি যদি এই ধরণের জিনিস প্রায়শই করেন তবে এটি ব্যবহার করে নিজের শর্ট সার্কিট সংস্করণগুলি তৈরি করা খুব সহজ numba:
import numba as nb
@nb.jit(nopython=True)
def sc_any(array):
for x in array.flat:
if x:
return True
return False
@nb.jit(nopython=True)
def sc_all(array):
for x in array.flat:
if not x:
return False
return True
সংক্ষিপ্ত-সার্কিট না হলেও এগুলি নিম্পির সংস্করণগুলির চেয়ে দ্রুততর হয়ে থাকে। count_nonzeroসবচেয়ে ধীর।
কর্মক্ষমতা পরীক্ষা করার জন্য কিছু ইনপুট:
import numpy as np
n = 10**8
middle = n//2
all_0 = np.zeros(n, dtype=int)
all_1 = np.ones(n, dtype=int)
mid_0 = np.ones(n, dtype=int)
mid_1 = np.zeros(n, dtype=int)
np.put(mid_0, middle, 0)
np.put(mid_1, middle, 1)
চেক করুন:
%timeit np.count_nonzero(all_0)
%timeit np.count_nonzero(all_1)
%timeit np.all(all_1)
%timeit np.all(mid_0)
%timeit np.all(all_0)
%timeit sc_all(all_1)
%timeit sc_all(mid_0)
%timeit sc_all(all_0)
%timeit np.any(all_0)
%timeit np.any(mid_1)
%timeit np.any(all_1)
%timeit sc_any(all_0)
%timeit sc_any(mid_1)
%timeit sc_any(all_1)
* সহায়ক allএবং anyসমতুল্য:
np.all(a) == np.logical_not(np.any(np.logical_not(a)))
np.any(a) == np.logical_not(np.all(np.logical_not(a)))
not np.all(a) == np.any(np.logical_not(a))
not np.any(a) == np.all(np.logical_not(a))
not np.count_nonzero(np.eye(4))ফিরে আসতে চানTrue