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

تحويل مصفوفة أحادية البعد 1D إلى مصفوفة ثنائية الأبعاد 2D في numpy

Amer Abdallah

السؤال

أريد تحويل مصفوفة أحادية الأبعاد إلى مصفوفة ثنائية الأبعاد عن طريق تحديد عدد الأعمدة في المصفوفة ثنائية الأبعاد. شيء من شأنه أن يعمل مثل هذا:

>>> import numpy as np
>>> A = np.array([1,2,3,4,5,6])
>>> B = vec2matrix(A, cols=2)	# Pseudocode
>>> B
array([[1, 2],
       [3, 4],
       [5, 6]])

هل توجد دالة أو طريقة في Numpy تقوم بهذا الأمر؟

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

Recommended Posts

  • 0

يمكن استخدام الدالة reshape من numpy مع إعطائها الوسطاء المناسبين، 

تعمل الدالة على استقبال وسيطين لتحديد عدد الأسطر و الأعمدة الناتجة عن التحويل، وفي حال إعطاء -1 في أحد الأبعاد سيتم حساب هذا الوسيط بشكل أوتوماتيكي ناتج عن عملية قسمة حجم المصفوفة على الوسيط الآخر:

ar.reshape(-1, 2)

مررنا -1 لعدد الأسطر لأنه ليس ضروري تحديده (يتم حسابه) و 2 لعدد الأعمدة.

هذه أفضل و أسرع طريقة لتحويل بنية المصفوفة

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

  • 0

يمكنك استخدام الدالة numpy.reshape لتشكيل اي مصفوفة بالشكل التي تريد، وهي بالشكل التالي:

numpy.reshape(arr, newshape, order='C')

انظر المثال التالي للتوضيح.

# نقوم بانشاء مصفوفة احادية الابعاد 1
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print('1D Numpy array:')
print(arr)

لتحويلها نكتب الكود التالي،حيث أن (2,5) هي شكل المصفوفة الجديدة بحيث ان 2 هو عدد الصفوف و 5 عدد الاعمدة.

import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# تحويل المصفوفة للشكل ثنائي الابعاد
arr_2d = np.reshape(arr, (2, 5))
print(arr_2d)

ويكون شكل الخرج كالتالي:

[[0 1 2 3 4]
 [5 6 7 8 9]]

 

تم التعديل في بواسطة Ahmed Sharshar
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكنك بالطبع تنفيذ ذلك من خلال numpy ولكن هناك حالتين لتنفيذ ذلك 

  • إذا كنت تريد التغيير في الدالة الأصلية يمكنك استخدام الدالة shape
    ar.shape = (-1, ncols)

    الكود السابق يقوم بالتعديل على shape المصفوفة الأصلية

  • أما إذا كنت تريد إرجاع مصفوفة جديدة يمكنك استخدام الدالة reshape كما تم الشرح في التعليقات السابقة

    new = np.reshape(arr, (-1, ncols))

     

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

  • 0

يمكنك القيام بذلك من خلال الدالة reshape هذه الدالة تمكنك من تعديل أبعاد المصفوفة بالشكل الذي تريده، والشرط الوحيد هو أن كون عدد العناصر في المصفوفة الجديدة التي تريد إعادة تشكيلها = عدد العناصر في المصفوفة الأصلية. أي إذا كانت المصفوفة الأصلية مصفوفة أحادية البعد ب 12 عنصر وأردنا تحويلها لمصفوفة ثنائية ببعدين وبالتالي يجب أن يكون ناتج جداء البعد الأول بالثاني =12 وبالتالي يمكن أن نستنتج أن أبعاد المصفوفة الناتجة إحدى الخيارات التالية:

a=np.arange(12)
a.reshape(3,4)
"""
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
"""
a.reshape(4,3)
"""
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
"""
a.reshape(6,2)
"""
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11]])
"""
a.reshape(2,6)
#  12!=4*4 هنا سيظهر خطأ كما قلنا لأن
a.reshape(4,4) # ValueError: cannot reshape array of size 12 into shape (4,4)

كما أننا يمكننا أن نمرر له بعد واحد والبعد الآخر نضع مكانه -1 و هو سيستنتجه تلقائياً وفقاُ لمعادلة الجداء:

a=np.arange(12)
a.reshape(-1,4) # سيستنتج أنه3
"""
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
"""
a.reshape(-1,3)#4 سيستنتج أنه 
"""
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
"""
# وهكذا....

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...