Amer Abdallah نشر 7 أغسطس 2021 أرسل تقرير نشر 7 أغسطس 2021 إن كان لدي مصفوفة بسيطة كالتالي: >>> 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 ولكني لم أنجح في حل المشكلة. اقتباس
0 Ahmed Sharshar نشر 8 أغسطس 2021 أرسل تقرير نشر 8 أغسطس 2021 يمكنك ببساطة استخدام الدالة 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 اقتباس
2 Ali Haidar Ahmad نشر 8 أغسطس 2021 أرسل تقرير نشر 8 أغسطس 2021 (معدل) يؤدي تكرار مصفوفة كصف باستخدام 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]]) """ تم التعديل في 8 أغسطس 2021 بواسطة Ali Haidar Ahmad 2 اقتباس
السؤال
Amer Abdallah
إن كان لدي مصفوفة بسيطة كالتالي:
كيف يمكنني تكرار المصفوفة السابقة لتكون بالشكل التالي:
لاحظ أنه تم نسخ المصفوفة في كل صف.
وبالمثل إن كانت المصفوفة عبارة عن عمود كالتالي:
كيف يمكنني إستنساخها لتكون بالشكل التالي:
حاولت أن أستعمل التابع transpose ودالة ones ولكني لم أنجح في حل المشكلة.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.