• 0

"الاستنساخ" صف أو عمود مصفوفة متجه Vector في Numpy

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

>>> 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 ولكني لم أنجح في حل المشكلة.

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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
2 اشخاص أعجبوا بهذا

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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]])

 

1 شخص أعجب بهذا

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


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

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

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

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


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

تسجيل الدخول

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


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