Amer Abdallah نشر 14 أغسطس 2021 أرسل تقرير نشر 14 أغسطس 2021 أرغب في نسخ مصفوفة ثنائية الأبعاد صغيرة الحجم إلى بُعد ثالث. على سبيل المثال: import numpy as np arr = np.array([[1,2],[1,2]]) تحويلها إلى مصفوفة ثلاثية الأبعاد مع نسخ المصفوفة في البعد الجديد. بفرض أنني أريد نسخها ثلاث مرات، يجب أن يكون الناتج كالتالي: new_arr = np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]]) # new_arr.shape = (3, 2, 2) كيف يمكنني أن أقوم بهذا الأمر؟ 1 اقتباس
0 Ali Haidar Ahmad نشر 14 أغسطس 2021 أرسل تقرير نشر 14 أغسطس 2021 (معدل) يمكنك القيام بذلك من خلال الدالة np.repeat بالشكل التالي، حيث تدرج الفهرسة باستخدام np.newaxis بُعدًا ثالثًا جديدًا، نكرره بعد ذلك مع المصفوفة: import numpy as np arr = np.array([[1, 2], [1, 2]]) arr.shape # (2, 2) a = np.repeat(arr[:, :, np.newaxis], 3, axis=2) arr.shape # (2, 2, 3) print(a[:, :, 0]) """ [[1 2] [1 2]] """ print(a[:, :, 1]) """ [[1 2] [1 2]] """ print(a[:, :, 2]) """ [[1 2] [1 2]] """ a """ array([[[1, 1, 1], [2, 2, 2]], [[1, 1, 1], [2, 2, 2]]]) """ أو: import numpy as np arr = np.array([[1, 2], [1, 2]]) arr.shape # (2, 2) a = np.repeat(arr[np.newaxis,:, :], 3, axis=0) # حددنا المحور العمودي للتكرار arr.shape # (2, 2, 3) print(a[0,:, :]) """ [[1 2] [1 2]] """ print(a[1,:, :]) """ [[1 2] [1 2]] """ print(a[2,:, :]) """ [[1 2] [1 2]] """ a """ array([[[1, 2], [1, 2]], [[1, 2], [1, 2]], [[1, 2], [1, 2]]]) """ أو من خلال دالة np.broadcast_to حيث أن هذه الطريقة لاتتطلب منك ذاكرة إضافية أبداً: import numpy as np arr = np.array([[1, 2], [1, 2]]) arr.shape # (2, 2) numofrepeats = 3 # إذا أردت التكرار على المحور العمودي np.broadcast_to(arr,(numofrepeats,)+arr.shape) """ array([[[1, 2], [1, 2]], [[1, 2], [1, 2]], [[1, 2], [1, 2]]]) """ # على المحور الثالث np.broadcast_to(arr[...,None],arr.shape+(numofrepeats,)) """ array([[[1, 1, 1], [2, 2, 2]], [[1, 1, 1], [2, 2, 2]]]) """ تم التعديل في 15 أغسطس 2021 بواسطة Ali Haidar Ahmad اقتباس
0 Ahmed Sharshar نشر 15 أغسطس 2021 أرسل تقرير نشر 15 أغسطس 2021 (معدل) يمكن استخدام الدالة repeat، عن طريق تحديد عدد المرات التي تريد تكرارها مسبقا، الكود التالي يوضح كيف تقوم بها: In [1]: import numpy as np In [2]: num_repeats = 5 In [3]: a = np.array([[1, 2], [1, 2]]) In [4]: b = np.dstack([a]*num_repeats) In [5]: b[:,:,0] Out[5]: array([[1, 2], [1, 2]]) In [6]: b[:,:,1] Out[6]: array([[1, 2], [1, 2]]) In [7]: b[:,:,2] Out[7]: array([[1, 2], [1, 2]]) In [8]: b[:,:,3] Out[8]: array([[1, 2], [1, 2]]) In [9]: b[:,:,4] Out[9]: array([[1, 2], [1, 2]]) In [10]: b.shape Out[10]: (2, 2, 3) تم التعديل في 15 أغسطس 2021 بواسطة Ahmed Sharshar اقتباس
0 عبدالباسط ابراهيم نشر 15 أغسطس 2021 أرسل تقرير نشر 15 أغسطس 2021 (معدل) بالإضافة لاستخدام repeat و broadcast_to يمكنك أيضاً استخدام الدالة np.tile بسهولة حيث تقوم بتحديد ال shape كالتالي import numpy as np a = np.array([[1,2],[1,2]]) b = np.tile(a,(3, 1,1)) b.shape (3,2,2) b array([[[1, 2], [1, 2]], [[1, 2], [1, 2]], [[1, 2], [1, 2]]]) تم التعديل في 15 أغسطس 2021 بواسطة عبدالباسط ابراهيم خطأ إملائي اقتباس
السؤال
Amer Abdallah
أرغب في نسخ مصفوفة ثنائية الأبعاد صغيرة الحجم إلى بُعد ثالث. على سبيل المثال:
تحويلها إلى مصفوفة ثلاثية الأبعاد مع نسخ المصفوفة في البعد الجديد. بفرض أنني أريد نسخها ثلاث مرات، يجب أن يكون الناتج كالتالي:
كيف يمكنني أن أقوم بهذا الأمر؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.