• 0

تحويل مصفوفة متعددة الأبعاد nD إلى مصفوفة أحادية الأبعاد 1D في Numpy؟

لنفترض أن لدي مصفوفة كالتالي:

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

هناك الكثير من الطرق وأولها الدالة 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 

 

تمّ تعديل بواسطة Ali Haidar Ahmad
1 شخص أعجب بهذا

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


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

يمكنك استخدام 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 شخص أعجب بهذا

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


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

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

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

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


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

تسجيل الدخول

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


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