اذهب إلى المحتوى
  • 0

كيفية حساب عدد تكرار القيم في المصفوفة Numpy؟

Fahmy Mostafa

السؤال

لنفترض أن لدي مصفوفة بسيطة تحتوي على عناصر مكررة كالتالي:

>>> 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؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

ألق نظرة على 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

هناك عدة طرق أولها استخدام التابع 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]])
"""

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

توجد العديد من الطرق لتنفيذ ذلك حيث في التعليقات السابقة تم استخدام 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

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...