Amer Abdallah نشر 6 أغسطس 2021 أرسل تقرير نشر 6 أغسطس 2021 لدي مصفوفة NumPy من نوع bool من النوع المنطقي. أريد حساب عدد العناصر التي تكون قيمها True. هل هناك دالة في Numpy أو Python مخصص لهذه المهمة؟ أو هل أحتاج إلى حلقة تكرار للعناصر الموجودة في المصفوفة الخاص بي؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 6 أغسطس 2021 أرسل تقرير نشر 6 أغسطس 2021 (معدل) ببساة يمكنك استخدام التابع sum فكما نعلم أن هذا التابع يقوم بحساب مجموع قيم مصفوفة ما، لكن إذا طبقته على مصفوفة بوليانية سيقوم بعد عدد مرات ظهور القيمة True : a=np.array([True,True,True,False,False]) sum(a) # 3 # أما في حالة كانت المصفوفة متعددة الأبعاد a=np.array([[True,True,True,False,False],[True,True,True,False,False]]) sum(a.ravel()) # 6 # أي يجب تسطيح المصفوفة إذا كانت بأكثر من بعد أو ببساطة متناهية: a=np.array([[True,True,True,False,False],[True,True,True,False,False]]) a[a].size حيث أن ناتج a[a] هو: array([ True, True, True, True, True, True]) أي فقط القيم التي تعطي True من a. أو من خلال التابع np.count_nonzero(array) : np.count_nonzero(a) # 6 أو من خلال التابع sum في نمباي: a.sum() أو من خلال استخدام التابع bicount من نمباي: arr=np.array([False, True, True, True, False, True, False, True, True]) #false وعدد ال true سيقوم بحساب عدد ال bin_arr = np.bincount(arr) bin_arr # array([3, 6]) #True لاستخلاص عدد ال bin_arr[1] # 6 للمقارنة: a=np.array([[True,True,True,False,False]*100]) %timeit a[a].size %timeit sum(a.ravel()) %timeit np.count_nonzero(a) %timeit a.sum() %timeit np.bincount(a.ravel()) """ The slowest run took 23.84 times longer than the fastest. This could mean that an intermediate result is being cached. 1000000 loops, best of 5: 1.82 µs per loop 1000 loops, best of 5: 1.14 ms per loop The slowest run took 19.70 times longer than the fastest. This could mean that an intermediate result is being cached. 1000000 loops, best of 5: 975 ns per loop The slowest run took 27.08 times longer than the fastest. This could mean that an intermediate result is being cached. 100000 loops, best of 5: 2.98 µs per loop The slowest run took 67.31 times longer than the fastest. This could mean that an intermediate result is being cached. 100000 loops, best of 5: 2.62 µs per loop """ تم التعديل في 6 أغسطس 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 6 أغسطس 2021 أرسل تقرير نشر 6 أغسطس 2021 لديك خيارات متعددة. خيارين كالآتي. boolarr.sum() numpy.count_nonzero(boolarr) هذا مثال >>> import numpy as np >>> boolarr = np.array([[0, 0, 1], [1, 0, 1], [1, 0, 1]], dtype=np.bool) >>> boolarr array([[False, False, True], [ True, False, True], [ True, False, True]], dtype=bool) >>> boolarr.sum() 5 بالطبع ، هذه إجابة محددة ل bool. بشكل عام ، يمكنك استخدام numpy.count_nonzero. >>> np.count_nonzero(boolarr) 5 اقتباس
السؤال
Amer Abdallah
لدي مصفوفة NumPy من نوع bool من النوع المنطقي. أريد حساب عدد العناصر التي تكون قيمها True. هل هناك دالة في Numpy أو Python مخصص لهذه المهمة؟ أو هل أحتاج إلى حلقة تكرار للعناصر الموجودة في المصفوفة الخاص بي؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.