Amer Abdallah نشر 13 أغسطس 2021 أرسل تقرير نشر 13 أغسطس 2021 لنفترض أن لدي مصفوفة NumPy كالتالي: a = np.array([1,2,3,1,2,1,1,1,3,2,2,1]) كيف يمكنني العثور على الرقم الأكثر تكرارا في هذه المصفوفة؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 14 أغسطس 2021 أرسل تقرير نشر 14 أغسطس 2021 يمكنك أولاً استخدام التابع bincount حيث أن هذا التايع يقوم بحساب عدد مرات التكرار لكل عنصر من المصفوفة: import numpy as np array = np.array([2, 9, 7, 10,3, 5, 3]) count=np.bincount(array) count # array([0, 0, 1, 2, 0, 1, 0, 1, 0, 1, 1]) # لاحظ أنه يعيد مصفوفة عدد عناصرها يساوي أكبر عنصر في المصفوفة # مثلاً في مصفوفتنا السابقة أكبر عنصر هو 10 وبالتالي سيكون حجم المصفوفة الناتجة10 # من المصفوفة الناتجة نستنتج أن العنصر الأكثر ظهوراً هو 3 حيث أن القيمة التي تقابل الفهرس 3 تساوي 2 في المصفوفة الناتجة أي أنه ظهر مرتين الآن يمكننا استخدام النتيجة التي حصلنا عليها من هذا التابع لمعرفة العنصر ذو أعلى تردد (الأكثر ظهوراً) ضمن المصفوفة وذلك من خلال التابع Argmax حيث يرد هذا التابع فهرس العنصر الأكبر، وفي المصفوفة count فإن العنصر الأكبر هو 2 وهو يقابل الفهرس 3 وهو يقابل أو يمثل القيمة 3 في المصفوفة Array: count.argmax() # 3 لكن مهلاً، بفرض كان هناك عنصران لهم أعلى ظهور ماذا سيحدث؟ import numpy as np array = np.array([2, 9, 7, 10,3,2, 5, 3]) count=np.bincount(array) count # array([0, 0, 2, 2, 0, 1, 0, 1, 0, 1, 1]) count.argmax() # 2 !!! لن يعطيك سوى قيمة وحيدة لاحظ أن العنصر 3 و العنصر 2 ظهرا مرتين لكن بهذه الطريقة لن نحصل إلا على قيمة واحدة. لذا الحل يكون كالتالي: maximum = max(count) #count نحسب القيمة الأكبر في مصفوفة ال #وكلما رأينا القيمة 2 نطبع الفهرس المقابل لها count نمرر حلقة على مصفوفة ال for i in range(len(count)): if count[i] == maximum: print(i, end=" ") # 2 3 الآن يجب أن تضع في حسبانك أن هذه الدالة تعمل فقط مع الأعداد، فماذا بشأن ال string وغيرها؟؟... هنا يأتي دور الدالة counter، كما ويمكنها حل مشكلتك مع الأرقام كالتالي: from collections import Counter array = np.array([2, 9,9, 7, 10,3, 5, 3]) array # array([ 2, 9, 9, 7, 10, 3, 5, 3]) # ترد هذه الدالة قاموس مفاتيحه هي العناصر وقيمها هي عدد مرات الظهور c = Counter(array) c # Counter({2: 2, 3: 2, 5: 1, 7: 1, 9: 1, 10: 1}) #مرتبة بحيث تكون العناصر الأكثر تكراراً في البداية tuble نطبق عليها الدالة التالية والتي تقوم بتحويلها إلى قائمة من ال freq=c.most_common() print (freq) # [(9, 2), (3, 2), (2, 1), (7, 1), (10, 1), (5, 1)] # والآن يمكنك استخراجها بسهولة freq[0][0] # 9 # إذا أردنا إظهار 3 أيضاً for i in range(0,len(freq)): if freq[i][1]==freq[0][1]: print(freq[i][0], end=" ") # 9 3 هناك طريقة أخرى وهي استخدام Mode من scipy.stats وكما نعلم فإن ال Mode هو العنصر الأكثر تكراراً: from scipy import stats as s array = np.array([2, 9, 7, 10,3, 5, 3]) print(s.mode(array)[0]) # 3 # لكن في حالة وجدت قيمتين سيعطيك الخطأ التالي array = np.array([2, 9,9, 7, 10,3, 5, 3]) print(s.mode(array)[0]) # [3] اقتباس
0 Wael Aljamal نشر 14 أغسطس 2021 أرسل تقرير نشر 14 أغسطس 2021 إن كانت جميع القيم في المصفوفة موجبة يمكن استخدام numpy.bincounts لحساب تكرار كل عدد ثم نطبق على ناتجه الدالة argmax: arr = np.array([1,2,3,1,2,1,1,1,3,2,2,1]) myCounter = np.bincount(arr) print(np.argmax(myCounter)) كما يمكن استخدام np.histogram : np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3]) (array([1, 4, 1]), array([0, 1, 2, 3])) bins هي العتبات التي سيتم حساب التكرار عندها، و np.histogram تعيد مصفوفة تحوي تكرار كل قيمة موافقة للعتبات bins للعنصر المقابل لها كما يمكن استخدام collections.Counter من بايثون: from collections import Counter a = [1,2,3,1,2,1,1,1,3,2,2,1] b = Counter(a) print(b.most_common(1)) حيث b يحمل تعداد التكرارات، ثم نطبيق الدالة most_common للأكثر تكرارا ونمرر الترتيب الأول لأكثر عنصر 1 اقتباس
0 Ahmed Sharshar نشر 14 أغسطس 2021 أرسل تقرير نشر 14 أغسطس 2021 دعنا نقوم بانشاء مصفوفة بشكل عشوائي كالتالي: import numpy as np x = np.random.randint(0, 10, 30) print(x) output >>> [9 8 3 8 6 0 8 0 9 5 1 2 9 3 4 4 9 4 5 8 6 6 6 6 9 4 8 6 2 0] يمكننا استخدام الدالة bincount( ).argmax( ) والتي تعطينا اكثر رقم تكرر في هذة المصفوفة كالتالي: print(np.bincount(x).argmax()) output >>> 6 هنا قام بارجاع الرقم 6 لانه الاكثر تكرارا في المصفوفة التي انشأناها. كذلك يمكننا استخدام الدالة counter وذلك لاعطاءنا كل رقم في المصفوفة وعدد مرات تكراره على شكل tuple مرتبة تنازليا كالتالي: from collections import Counter b = Counter(x) print (b.most_common()) output >>> [(6, 6), (9, 5), (8, 5), (4, 4), (0, 3), (3, 2), (5, 2), (2, 2), (1, 1)] هنا قامت الدالة بارجاع كل رقم في المصفوفة وبجواره عدد مرات تكراره، فمثلا الرقم 9 تم تكراره 5 مرات وهكذا. 1 اقتباس
0 عبدالباسط ابراهيم نشر 14 أغسطس 2021 أرسل تقرير نشر 14 أغسطس 2021 توجد العديد من الطرق المستخدمة سواء باستخدام python أو numpy مثل استخدام numpy.bincounts أو collections.Counter كما يمكنك أيضاً استخدام np.unique كالتالي values, counts = np.unique(a, return_counts=True) ind = np.argmax(counts) print(values[ind]) # طباعة الرقم الأكثر تكراراً يمكنك أيضاً استخدام statistics.mode بداية من Python 3.4 from statistics import mode mode([1, 2, 3, 1, 2, 1, 1, 1, 3, 2, 2, 1]) # 1 وإذا كان هناك عدة عناصر بنفس التكرار وتريد إرجاعهم جميعاً نستخدم statistics.multimode from statistics import multimode multimode([1, 2, 3, 1, 2]) # [1, 2] اقتباس
السؤال
Amer Abdallah
لنفترض أن لدي مصفوفة NumPy كالتالي:
كيف يمكنني العثور على الرقم الأكثر تكرارا في هذه المصفوفة؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.