logo

تبديل مصفوفة في سطر واحد في بايثون

نقل المصفوفة في بايثون يعني قلبها على قطرها وتحويل كل الصفوف إلى أعمدة وجميع الأعمدة إلى صفوف. على سبيل المثال هـ مصفوفة مثل [[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 من كل من تسلسلات الوسيطات أو العناصر التكرارية. في هذا المثال، نقوم بفك ضغط المصفوفة باستخدام * ثم نقوم بضغطها للحصول على عملية النقل.

Python
m = [(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: تقوم طريقة النقل بإرجاع عرض منقول للمصفوفة متعددة الأبعاد التي تم تمريرها.

Python
import 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() هي دالة تأخذ سلسلة من العناصر التكرارية وترجع عنصرًا واحدًا قابلاً للتكرار.

Python
from 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.

مقالات ذات صلة:

  • قائمة الفهم
  • أدوات بايثون التكرارية
  • بايثون الرمز البريدي
  • سلسلة()
  • الصفوف
  • بايثون نامبي