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

السؤال

نشر

إن كان لدي مصفوفة بسيطة كالتالي:

>>> import numpy as np
>>> arr = np.array([1, 2, 3])
>>> 

كيف يمكنني تكرار المصفوفة السابقة لتكون بالشكل التالي:

[[1, 2, 3],
 [1, 2, 3],
 [1, 2, 3]]

لاحظ أنه تم نسخ المصفوفة في كل صف.

وبالمثل إن كانت المصفوفة عبارة عن عمود كالتالي:

>>> arr = np.array([[1],[2],[3]])
>>> arr
array([[1],
       [2],
       [3]])

كيف يمكنني إستنساخها لتكون بالشكل التالي:

[[1, 1, 1]
 [2, 2, 2]
 [3, 3, 3]]

حاولت أن أستعمل التابع transpose ودالة ones ولكني لم أنجح في حل المشكلة.

Recommended Posts

  • 0
نشر

يمكنك ببساطة استخدام الدالة numpy.repeat من اجل تكرار عناصر معينة بالشكل الذي تريدة سواء كان افقيا او راسيا.

انظر المثال التالي للتوضيح:

>>> np.repeat(3, 4)
array([3, 3, 3, 3])
>>> x = np.array([[1,2],[3,4]])
>>> np.repeat(x, 2)
array([1, 1, 2, 2, 3, 3, 4, 4])
>>> np.repeat(x, 3, axis=1)
array([[1, 1, 1, 2, 2, 2],
       [3, 3, 3, 4, 4, 4]])
>>> np.repeat(x, [1, 2], axis=0)
array([[1, 2],
       [3, 4],
       [3, 4]])

حيث أن axis تمثل الاتجاة الراسي او الافقي بحيث x=0 تعني تكرارا في الاتجاة الراسي و axis =1 تعني تكرارا في الاتجاه الافقي.

كذلك يمكنك استخدام طريقة ذكية كالتالي:

>>> array([[1,2,3],]*3)
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

>>> array([[1,2,3],]*3).transpose()
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])

 

  • 2
نشر (معدل)

يؤدي تكرار مصفوفة كصف باستخدام NumPy إلى ظهور مصفوفة ثنائية الأبعاد جديدة بحيث يكون كل صف هو المصفوفة الأصلية. ينتج عن تكرار مصفوفة كعمود مصفوفة ثنائية الأبعاد جديدة بحيث يكون كل عمود هو المصفوفة الأصلية. أول طريقة لتنفيذ ماتطلبه هي استخدام دالة np.repeat بالشكل التالي، حيث نمرر لها المصفوفة والمحور الذي نريد التكرار عليه وعدد التكرارات:

import numpy as np
array_2d = np.array([[1,2,3]])
# سيتم تكرار عناصر المصفوفة على طول الصفوف أي إلى أسفل. 
np.repeat(array_2d,repeats=3,axis=0)
"""
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])
"""
arr = np.array([[1],[2],[3]])
# ًفي هذه الحالة، إذا كنت ستستخدم المحور = 1 ، فسيتم تكرار العناصر مع الأعمدة أي أفقيا
np.repeat(arr,repeats=3,axis=1)
"""
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
"""

يمكنك أيضاً استخدام الدالة numpy.tile حيث نمرر لها المصفوفة وعدد مرات التكرار ك tuple أي بالشكل (n, 1)  حيث تمثل n عدد مرات التكرار. والنتيجة ستكون تكرار المصفوفة أحادية الأبعاد الممررة للدالة tile على المحور العمودي. (أي التكرار كأسطر).

an_array = np.array([1,2,3])
# عدد مرات التكرار
repeat = 3
np.tile(an_array, (repeat, 1))
"""
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
"""

أما لو أردت التكرار كأعمدة كما في الحالة الثانية يمكنك استخدام numpy.transpose بالشكل التالي:

an_array = np.array([[1],[2],[3]])
# عدد مرات التكرار
repeat = 3
np.transpose([an_array] * repeat)
"""
array([[[1, 1, 1],
        [2, 2, 2],
        [3, 3, 3]]])
"""

وأخيراً يمكنك استخدام التابع np.broadcast_to بحيث نمرر له المصفوفة والأبعاد الجديدة وهو سيتكفل بالتكرار كما في المثال التالي :

an_array = np.array([[1],[2],[3]])
np.broadcast_to(an_array, (3, 3))
"""
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
"""
an_array = np.array([1,2,3])
np.broadcast_to(an_array, (3, 3))
"""
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])
"""

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...