Amer Abdallah نشر 10 أغسطس 2021 أرسل تقرير نشر 10 أغسطس 2021 لنفترض أن لدي مصفوفة كالتالي: import numpy as np arr = np.array([[1,2,3], [4,5,6]]) أريد تحويل هذه المصفوفة إلى مصفوفة ذات بُعد واحد 1D، لذلك حاولت القيام بالتالي: b = np.reshape(arr, (1,np.product(arr.shape))) ومع ذلك كانت النتيجة مختلف عما أريد، النتيجة هي: array([[1, 2, 3, 4, 5, 6]]) بينما من المفترض أن تكون كالتالي: array([1, 2, 3, 4, 5, 6]) يمكنني أخذ العنصر الأول من هذه المصفوفة لتحويله يدويًا إلى مصفوفة 1D، ولكن هذا الأمر يتطلب معرفة أبعاد المصفوفة الأصلية لعمل ذلك. كيف يمكن تحويل أي مصفوفة إلى مصفوفة أحادية الأبعاد في Numpy؟ اقتباس
1 Ali Haidar Ahmad نشر 10 أغسطس 2021 أرسل تقرير نشر 10 أغسطس 2021 (معدل) هناك الكثير من الطرق وأولها الدالة flatten وهذه الدالة تعيد نسخة من المصفوفة الأصلية: import numpy as np a = np.array([[1, 2, 3], [45, 4, 7], [9, 6, 10]]) a.flatten() #array([ 1, 2, 3, 45, 4, 7, 9, 6, 10]) إذا كنت تتعامل مع ndarray كبيرة الحجم ، فقد يتسبب استخدام flatten في حدوث مشكلة في الأداء. يوصى بعدم استخدامه في هكذا حالات (كما أنه أبطأ كثيراً). ما لم تكن بحاجة إلى نسخة من البيانات للقيام بشيء آخر.... أيضاً يمكن استخدام الدالة ravel: import numpy as np a = np.array([[1, 2, 3], [45, 4, 7], [9, 6, 10]]) a.ravel() #array([ 1, 2, 3, 45, 4, 7, 9, 6, 10]) أو من خلال الدالة reshape: import numpy as np a = np.array([[1, 2, 3], [45, 4, 7], [9, 6, 10]]) a.reshape(-1) # فقط نمرر لها -1 #array([ 1, 2, 3, 45, 4, 7, 9, 6, 10]) ينصح باستخدام reshape فهي توفر المرونة في إعادة تشكيل الحجم إضافةً إلى أنها هي و ravel سريعتين (بنفس الأداء تقريباً). ويمكنك أيضاً استخدام flat لكن هنا لايعيد لك مصفوفة جديدة وإنما iterator (مكرر) على مصفوفتك (ربما يفيدك): import numpy as np a = np.array([[1, 2, 3], [45, 4, 7], [9, 6, 10]]) arr=a.flat for i in a.flat: print(i,end=" ") #1 2 3 45 4 7 9 6 10 تم التعديل في 10 أغسطس 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
0 عبدالباسط ابراهيم نشر 11 أغسطس 2021 أرسل تقرير نشر 11 أغسطس 2021 يمكنك استخدام ravel أو flatten أو flat ولكن لكل دالة هدف حيث أن ravel تقوم بإرجاع view من المصفوفة أي أنه عند التغيير في المصفوفة الجديدة تطبق التغييرات على المصفوفة القديمة a = np.array([[1,2,3], [4,5,6]]) b = a.ravel() b array([1, 2, 3, 4, 5, 6]) بينما flatten تقوم بإرجاع نسخة أو copy من المصفوفة القديمة c = a.flatten() إنما flat تقوم بإرجاع iterator وليس مصفوفة d = a.flat 1 اقتباس
السؤال
Amer Abdallah
لنفترض أن لدي مصفوفة كالتالي:
أريد تحويل هذه المصفوفة إلى مصفوفة ذات بُعد واحد 1D، لذلك حاولت القيام بالتالي:
ومع ذلك كانت النتيجة مختلف عما أريد، النتيجة هي:
بينما من المفترض أن تكون كالتالي:
يمكنني أخذ العنصر الأول من هذه المصفوفة لتحويله يدويًا إلى مصفوفة 1D، ولكن هذا الأمر يتطلب معرفة أبعاد المصفوفة الأصلية لعمل ذلك.
كيف يمكن تحويل أي مصفوفة إلى مصفوفة أحادية الأبعاد في Numpy؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.