اذهب إلى المحتوى

السؤال

نشر

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

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؟

Recommended Posts

  • 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
  • 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

     

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...