Fahmy Mostafa نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 لنفترض أن لدي مصفوفة بسيطة تحتوي على عناصر مكررة كالتالي: >>> import numpy as np >>> x = np.array([1,1,1,2,2,2,5,25,1,1]) >>> freq_count(x) # pseudo code [(1, 5), (2, 3), (5, 1), (25, 1)] >>> كيف يمكنني الحصول على نفس النتيجة السابقة في Numpy؟ 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 ألق نظرة على np.bincount في التوثيق. import numpy as np x = np.array([1,1,1,2,2,2,5,25,1,1]) y = np.bincount(x) ii = np.nonzero(y)[0] ومن ثم zip(ii,y[ii]) # [(1, 5), (2, 3), (5, 1), (25, 1)] أو np.vstack((ii,y[ii])).T # array([[ 1, 5], [ 2, 3], [ 5, 1], [25, 1]]) أو أو كما تريد دمج عدد التكرار مع القيم الفريدة . اقتباس
0 Ali Haidar Ahmad نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 (معدل) هناك عدة طرق أولها استخدام التابع unique ثم zip كالتالي: import numpy as np a = np.array([1,1,1,2,2,2,5,25,1,1]) unique, counts = np.unique(a, return_counts=True) dict(zip(unique, counts)) # {1: 5, 2: 3, 5: 1, 25: 1} أو من خلال التابع Counter كالتالي : import numpy as np a = np.array([1,1,1,2,2,2,5,25,1,1]) import collections collections.Counter(a) # Counter({1: 5, 2: 3, 5: 1, 25: 1}) أو باستخدام bincount وهي الطريقة الأسرع، حيث تقوم هذه الطريقة بإعادة مصفوفة طولها بطول أكبر قيمة في مصفوفتك، أي إذا كانت 30 سيكون خرجها شعاع ب 30 عنصر بحيث كل index فيها يقابل تكرار الرقم الموافق له في بياناتك، أي مثلاً ال index رقم 1 في مصفوفة الخرج يقابل عدد مرات ظهور الرقم 1 في مصفوفتك: import numpy as np a = np.array([1,1,1,2,2,2,5,25,1,1]) print(np.bincount(a)) """ [0 5 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] """ أو من خلالscipy.stats.itemfreq : import numpy as np a = np.array([1,1,1,2,2,2,5,25,1,1]) from scipy.stats import itemfreq itemfreq(a) """ array([[ 1, 5], [ 2, 3], [ 5, 1], [25, 1]]) """ وآخر حل من خلال pandas مع التابع stack من نمباي، كالتالي: import numpy as np a = np.array([1,1,1,2,2,2,5,25,1,1]) import pandas as pd def pandas_value_counts(a): out = pd.value_counts(pd.Series(a)) out.sort_index(inplace=True) out = np.stack([out.keys().values, out.values]).T return out pandas_value_counts(a) """ array([[ 1, 5], [ 2, 3], [ 5, 1], [25, 1]]) """ تم التعديل في 2 أغسطس 2021 بواسطة Ali Haidar Ahmad اقتباس
0 عبدالباسط ابراهيم نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 توجد العديد من الطرق لتنفيذ ذلك حيث في التعليقات السابقة تم استخدام unique Counter و bincount ولكن يمكنك استخدام pandas أيضاً كالتالي >>> import pandas as pd >>> import numpy as np >>> x = np.array([1,1,1,2,2,2,5,25,1,1]) >>> pd.value_counts(x) 1 5 2 3 25 1 5 1 dtype: int64 اقتباس
السؤال
Fahmy Mostafa
لنفترض أن لدي مصفوفة بسيطة تحتوي على عناصر مكررة كالتالي:
كيف يمكنني الحصول على نفس النتيجة السابقة في Numpy؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.