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

السؤال

نشر

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

>>> 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]])

 

Recommended Posts

  • 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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...