نقل المصفوفة في بايثون يعني قلبها على قطرها وتحويل كل الصفوف إلى أعمدة وجميع الأعمدة إلى صفوف. على سبيل المثال هـ مصفوفة مثل [[1 2] [3 4] [5 6]] التي تحتوي على 3 صفوف وعمودين تصبح [[1 3 5] [2 4 6]] والتي تحتوي على صفين و 3 أعمدة بعد النقل. دعونا نفهم الطرق المختلفة للقيام بذلك بكفاءة.
استخدام فهم القائمة
يتم استخدام فهم القائمة للتكرار من خلال كل عنصر في المصفوفة. في المثال الموضح، نكرر كل عنصر من عناصر المصفوفة (m) بطريقة العمود الرئيسي ونخصص النتيجة لمصفوفة rez التي تمثل تبديل m.
أين إعدادات المتصفحPython
m = [[1 2] [3 4] [5 6]] res = [[m[j][i] for j in range(len(m))] for i in range(len(m[0]))] for row in res: print(row)
الإخراج
[1 3 5] [2 4 6]
توضيح: ينشئ هذا التعبير مصفوفة جديدة عن طريق أخذ كل عمود من العمود الأصلي كصف في العمود الجديد. يقوم بتبديل الصفوف بالأعمدة.
في الغناء الرمز البريدي
يُرجع Python Zip مكررًا للصفوف حيث يحتوي الصف i-th على العنصر i-th من كل من تسلسلات الوسيطات أو العناصر التكرارية. في هذا المثال، نقوم بفك ضغط المصفوفة باستخدام * ثم نقوم بضغطها للحصول على عملية النقل.
Pythonm = [(1 2 3) (4 5 6) (7 8 9) (10 11 12)] t_m = zip(*m) for row in t_m: print(row)
الإخراج
(1 4 7 10) (2 5 8 11) (3 6 9 12)
توضيح: ينقل هذا الرمز المصفوفة م استخدام الرمز البريدي (* م) . يقوم * بفك الصفوف و أَزِيز() مجموعات العناصر من حيث العمود. يمثل كل صف إخراج عمودًا من المصفوفة الأصلية مع تبديل الصفوف والأعمدة بشكل فعال.
باستخدام NumPy
Python NumPy عبارة عن حزمة معالجة مصفوفة للأغراض العامة مصممة للتعامل بكفاءة مع المصفوفات الكبيرة متعددة الأبعاد.
مثال 1: تقوم طريقة النقل بإرجاع عرض منقول للمصفوفة متعددة الأبعاد التي تم تمريرها.
Pythonimport numpy m = [[1 2 3] [4 5 6]] print(numpy.transpose(m))
الإخراج
[[1 4] [2 5] [3 6]]
شرح: numpy.transpose() مبادلة صفوف وأعمدة المصفوفة m. يقوم بتحويل المصفوفة الأصلية المكونة من صفين و3 أعمدة إلى مصفوفة بها 3 صفوف وعمودين وتنقلها بشكل فعال.
مثال 2: استخدام '.T' بعد المتغير
المعالجة المتوازيةPython
import numpy as np m = np.array([[1 2 3] [4 5 6]]) print(m.T)
الإخراج
[[1 4] [2 5] [3 6]]
توضيح: يستخدم هذا الرمز NumPy لإنشاء مصفوفة ثنائية الأبعاد ثم يطبع موضع النقل الخاص به باستخدام .ت . ال .ت تقوم السمة بمبادلة الصفوف والأعمدة لتحويل المصفوفة 2x3 الأصلية إلى مصفوفة منقولة 3x2.
باستخدام Itertools
Python itertools هي وحدة توفر وظائف متنوعة تعمل على التكرارات لإنتاج تكرارات معقدة. chain() هي دالة تأخذ سلسلة من العناصر التكرارية وترجع عنصرًا واحدًا قابلاً للتكرار.
Pythonfrom itertools import chain import time import numpy as np def transpose2(M): M = M.tolist() n = len(M[0]) L = list(chain(*M)) return [L[i::n] for i in range(n)] m = np.array([[1 2 3] [4 5 6]]) start = time.time_ns() res = transpose2(m) end = time.time_ns() print(res) print('Time taken' end - start 'ns')
الإخراج
[[1 4] [2 5] [3 6]] Time taken 9813 ns
توضيح: يقوم أولاً بتحويل المصفوفة إلى قائمة قوائم وتسويتها في قائمة واحدة باستخدام السلسلة (*M) ثم يعيد بناء المصفوفة المنقولة عن طريق تقطيع كل عنصر من العناصر n.
مقالات ذات صلة:
- قائمة الفهم
- أدوات بايثون التكرارية
- بايثون الرمز البريدي
- سلسلة()
- الصفوف
- بايثون نامبي