• 0

كيفية عمل مصفوفة Numpy بأبعاد معينة وتحتوي على قيم متطابقة؟

أريد أن أقوم بعمل مصفوفة بأبعاد معينة وتكون كل العناصر في المصفوفة عبارة عن نرقم معين، حاولت أن أستخدم الكود التالي:

>>> import numpy as np
>>> a = np.empty(5)
>>> for i in range(5):
...     a[i] = 9
...
>>> a
array([9., 9., 9., 9., 9.])

لكن المشكلة أنه لا يمكنني عمل مصفوفة متعددة الأبعاد بشكل سهل، وسأحتاج إلى أستخدام حلقات متعددة، هل توجد طريقة أسهل في Numpy لعمل مصفوفة كالتالي على سبيل المثال:

array([[3, 3, 3, 3],
       [3, 3, 3, 3],
       [3, 3, 3, 3]])

 

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


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

يمكنك استخدام numpy.full لفعل ذلك, تقبل هذه الدالة معاملان, المعامل الاول أبعاد المصفوفة, المعامل الثاني هو الرقم الذي تريد الحصول عليه, على سبيل المثال

an_array = np.full((3, 5), 8)

كما تلاحظ المعامل الأول هو أبعاد المصفوفة وقمت بتحديدها على ان تكون 3 صفوف و5 اعمدة , أما المعامل الثاني هو الرقم الذي تريد وانا اخترت الرقم 8, سوف يكون النانتج كالآتي

[[8 8 8 8 8]
 [8 8 8 8 8]
 [8 8 8 8 8]]

 

انشر على الشّبكات الاجتماعية


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

أبسط طريقة:

# نحدد الأبعاد والقيمة
np.full((4, 3), 2, dtype=int)
"""
array([[2, 2, 2],
       [2, 2, 2],
       [2, 2, 2],
       [2, 2, 2]])
"""

وهناك طرق عديدة أخرى سأعرضها في المثال بعد قليل، لكن قبل ذلك أود أن ألفت الانتباه إلى أن الدالة repeat نمرر لها القيمة ثم عدد المرات التي نريد بها تكرار هذه القيمة ، وبالتالي تعيد لنا مصفوفة ببعد واحد، وبالتالي يمكننا تغيير أبعاد المصفوفة الناتجة حسبما نريد باستخدام التابع reshape،  فمثلاً نريد إنشاء مصفوفة بأبعاد 5*5 وكل قيمها 4، وبالتالي نقوم باستتدعاء الدالة repeat بالشكل التالي repeat(4,25) ثم نقوم بعمل إعادة تعيين للأبعاد أي تصبح بالشكل  التالي: np.repeat(4,25).reshape(5,5)  وبنفس الطريقة يمكننا استخدام التابع array مع reshape لتحقيق مانريده. أي يمكنك استخدام الدالة reshape لتحويل مصفوفتك إلى أي شكل لكن تذكر أن عدد العناصر قبل التحويل يجب أن يساوي عدد العناصر بعد التحويل أي في المثال السابق كان لدينا مصفوفة ب 25 قيمة وبالتالي لايمكنك تحويلها لمصفوفة بأبعاد 3*4 لأن 3*4=12 عنصر أي لاتساوي 25.

# الهدف إنشاء مصفوفة بأبعاد 5*5 وكل القيم 4
a=np.repeat(4,25) # 1D array
"""
array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4])
"""
a=a.reshape(5,5)
"""
array([[4, 4, 4, 4, 4],
       [4, 4, 4, 4, 4],
       [4, 4, 4, 4, 4],
       [4, 4, 4, 4, 4],
       [4, 4, 4, 4, 4]])
"""
# اختصاراً
np.repeat(4,25).reshape(5,5)

المثال التالي يوضح كل شيئ:

#fill ثم التابع  empty استخدام الدالة 
a=np.empty((3,3));
a.fill(5)
"""
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])
"""
# أيضاً استخدام نفس التابع لكن بشكل مختلف 
a=np.empty((3,3)); a[:]=5  # نقوم بإسناد القيمة التي نريدها لكل عناصر المصفوفة
#ones من خلال التابع 
a=np.ones((3,3))*5
"""
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])
"""
#repeat من خلال التابع 
a=np.repeat(5,9).reshape(3,3)
a
"""
array([[5, 5, 5],
       [5, 5, 5],
       [5, 5, 5]])
"""
# numpy.tile(v, (rows,cols))
a=np.tile(5,(3,3))
a
"""
array([[5, 5, 5],
       [5, 5, 5],
       [5, 5, 5]])
"""
#reshape التابع repeatسنستخدم بنفس فكرة 
a=np.array(9 * [5]).reshape(3,3)
"""
array([[5, 5, 5],
       [5, 5, 5],
       [5, 5, 5]])
"""

وأسر ع طريقة هي استخدام الدالة empty

تمّ تعديل بواسطة Ali Haidar Ahmad

انشر على الشّبكات الاجتماعية


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

هناك طريقتين شهيرتين في numpy تستخدمان لملئ مصفوفة بنفس الرقم وهما:

np.empty : وتستخدم في ملئ مصفوفة بنفس القيمة كالتالي:

a = np.empty(100)
a.fill(9)

np.full: وتستخدم في الاصدارات الحديثة من numpy كالتالي:

np.full(100, 9)

ثم لاعادة تشكيل المصفوفة بالابعاد التي تريد يمكنك استخدم np.reshape  كالتالي:

a.reshape(5,5)

وستقوم بتحويلها لمصفوفة ذات ابعاد 5*5

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن