অন্য উত্তরটি যেমন বলেছে, আপনি যদি সত্যই / মিথ্যা মূল্যায়নের সুবিধা গ্রহণ করতে পারেন তবে আপনি যদি জানেন যে 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