إعادة تشكيل صفيف NumPy


إعادة تشكيل المصفوفات

إعادة التشكيل تعني تغيير شكل المصفوفة.

شكل المصفوفة هو عدد العناصر في كل بُعد.

من خلال إعادة التشكيل ، يمكننا إضافة أبعاد أو إزالتها أو تغيير عدد العناصر في كل بُعد.


إعادة التشكيل من 1-D إلى 2-D

مثال

قم بتحويل المصفوفة 1-D التالية المكونة من 12 عنصرًا إلى مصفوفة ثنائية الأبعاد.

سيحتوي البعد الخارجي على 4 مصفوفات ، كل منها يحتوي على 3 عناصر:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.reshape(4, 3)

print(newarr)

إعادة التشكيل من 1-D إلى 3-D

مثال

قم بتحويل المصفوفة 1-D التالية المكونة من 12 عنصرًا إلى مصفوفة ثلاثية الأبعاد.

سيحتوي البعد الخارجي على صفيفتين تحتويان على 3 مصفوفتين ، كل منهما يحتوي على عنصرين:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.reshape(2, 3, 2)

print(newarr)


هل يمكننا إعادة التشكيل بأي شكل؟

نعم ، طالما أن العناصر المطلوبة لإعادة التشكيل متساوية في كلا الشكلين.

يمكننا إعادة تشكيل مجموعة مكونة من 8 عناصر 1D إلى 4 عناصر في صفين 2D مصفوفة ولكن لا يمكننا إعادة تشكيلها في 3 عناصر 3 صفوف 2D مصفوفة لأن ذلك يتطلب 3x3 = 9 عناصر.

مثال

حاول تحويل مصفوفة 1D ذات 8 عناصر إلى مصفوفة ثنائية الأبعاد تحتوي على 3 عناصر في كل بُعد (سيؤدي إلى حدوث خطأ):

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

newarr = arr.reshape(3, 3)

print(newarr)

إرجاع نسخ أو عرض؟

مثال

تحقق مما إذا كانت المصفوفة التي تم إرجاعها عبارة عن نسخة أم عرض:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

print(arr.reshape(2, 4).base)

يُرجع المثال أعلاه المصفوفة الأصلية ، لذا فهي طريقة عرض.


البعد غير معروف

يُسمح لك بالحصول على بُعد واحد "غير معروف".

بمعنى أنه لا يتعين عليك تحديد رقم دقيق لأحد الأبعاد في طريقة إعادة التشكيل.

-1قم بالتمرير كقيمة ، وسيقوم NumPy بحساب هذا الرقم نيابة عنك .

مثال

تحويل مصفوفة 1D ذات 8 عناصر إلى مصفوفة ثلاثية الأبعاد بعناصر 2x2:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

newarr = arr.reshape(2, 2, -1)

print(newarr)

ملحوظة: لا يمكننا المرور -1إلى أكثر من بعد واحد.


تسطيح المصفوفات

مصفوفة التسوية تعني تحويل مصفوفة متعددة الأبعاد إلى مصفوفة أحادية الأبعاد.

يمكننا استخدامها reshape(-1)للقيام بذلك.

مثال

قم بتحويل المصفوفة إلى صفيف أحادي الأبعاد:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

newarr = arr.reshape(-1)

print(newarr)

ملاحظة: هناك الكثير من الوظائف لتغيير أشكال المصفوفات في numpy flatten، ravelوأيضًا لإعادة ترتيب العناصر rot90، flipوما إلى ذلك fliplr. flipudتقع هذه الوظائف ضمن قسم متوسط ​​إلى متقدم من numpy.


اختبر نفسك مع التمارين

ممارسه الرياضه:

استخدم طريقة NumPy الصحيحة لتغيير شكل المصفوفة من 1-D إلى 2-D.

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)