English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يعني القطع في Python نقل العناصر من مؤشر معين إلى مؤشر آخر.
نرسل القطع بدلاً من المؤشرات[start:end].
يمكننا أيضًا تعريف طول القطع، مثلما هو موضح أدناه:[start:end:step].
إذا لم نرسل start، فإنه يعتبر 0.
إذا لم نرسل end، فإنه يعتبر طول المصفوفة في هذا البعد.
إذا لم نرسل step، فإنه يعتبر 1.
لننظر في مثال عملي
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[1:5]) # قطع من مؤشر 1 إلى مؤشر 5 [2 3 4 5] >>> print(arr[4:]) # قطع من مؤشر 4 إلى النهاية [5 6 7] >>> print(arr[:4]) # قطع من البداية إلى مؤشر 4 (باستثناء) [1 2 3 4]
استخدام علامة النقص (-) للإشارة إلى مؤشرات النهاية
من مؤشر 3 إلى مؤشر 1 من النهاية، قم بتقطيع المصفوفة
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[-3:-1]) [5 6 ]
استخدام قيمة step لتحديد طول القطع
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[1:5:2]) # العناصر من مؤشر 1 إلى مؤشر 5، مع الفاصل الزمني [2 4] >>> print(arr[::2]) # العناصر التي تفصل بينها نصف الطول [1 3 5 7]
من العنصر الثاني، قم بتقطيع العناصر من مؤشر 1 إلى مؤشر 4 (باستثناء)
>>> import numpy as np >>> arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) >>> print(arr[1, 1:4]) # من العنصر الثاني، قم بتقطيع العناصر من مؤشر 1 إلى مؤشر 4 (باستثناء) [7 8 9] >>> print(arr[0:2, 2]) # من العناصر الثلاثة العنصر 2 [3 8] >>> print(arr[0:2, 1:4]) # قطع من مؤشرات 1 إلى مؤشر 4 (باستثناء)، مما يعني أننا سنحصل على مصفوفة ثنائية الأبعاد [[2 3 4] [7 8 9]
NumPy يقدم طرقًا أكثر للتحقق من المؤشرات من الأنواع العامة للسلاسل في Python. بالإضافة إلى الطرق التي رأيناها من خلال استخدام المؤشرات الصحيحة والقطع، يمكن استخدام مؤشرات مصفوفة عددية وطرق التحقق من الصحة والطرق المتنوعة.
السلسلة التالية تحصل على العناصر في المواضع (0,0)، (1,1) و (2,0) من المصفوفة.
>>> import numpy as np >>> x = np.array([[1, 2], [3, 4], [5, 6]]) >>> y = x[[0,1,2], [0,1,0]] >>> print(y) [1 4 5 ]
السلسلة التالية تحصل على عناصر الزوايا لأبعاد 4x3. أرقام الصف هي [0,0] و [3,3]، بينما أرقام العمود هي [0,2] و [0,2].
>>> import numpy as np >>> x = np.array([[ 0, 1, 2 ], [ 3, 4, 5 ], [ 6, 7, 8 ], [ 9, 10, 11 ]]) >>> print(x) [[ 0 1 2 ] [ 3 4 5 ] [ 6 7 8 ] [ 9 10 11 ] >>> rows = np.array([[0,0],[3,3]]) >>> cols = np.array([[0,2],[0,2]]) >>> y = x[rows,cols] >>> print(y) [[ 0 2 ] [ 9 11 ]
النتيجة هي مصفوفة ndarray تحتوي على عناصر الزوايا.
يمكن استخدام قطع : أو ... مع مصفوفة التتبع لتحقيق ذلك. مثل المثال التالي:
>>> import numpy as np >>> a = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> b = a[1:3, 1:3] >>> c = a[1:3,[1,2]] >>> d = a[...,1:] >>> print(b) [[5 6 ] [8 9 ] >>> print(c) [[5 6 ] [8 9 ] >>> print(d) [[2 3 ] [5 6 ] [8 9 ]
يمكننا استخدام مصفوفة بولية لتتبع المصفوفة المستهدفة.
البحث بال布尔ية يتم من خلال العمليات البولية (مثل: عمليات المقارنة) للحصول على مجموعة العناصر التي تتوافق مع الشروط المحددة.
السلسلة التالية تحصل على العناصر التي هي أكبر من 5:
>>> import numpy as np >>> x = np.array([[ 0, 1, 2 ], [ 3, 4, 5 ], [ 6, 7, 8 ], [ 9, 10, 11 ]]) >>> print(x) [[ 0 1 2 ] [ 3 4 5 ] [ 6 7 8 ] [ 9 10 11 ] >>> print(x[x > 5]) # الآن سنقوم بطباعة العناصر التي هي أكبر من 5 [ 6 7 8 9 10 11 ]
السلسلة التالية تستخدم ~ (وظيفة الحساب بالعكس) لتصفية NaN.
>>> import numpy as np >>> a = np.array([np.nan, 1,2,np.nan,3,4,5]) >>> print(a[~np.isnan(a)]) [ 1. 2. 3. 4. 5. ]
السلسلة التالية تظهر كيفية تصفية العناصر غير المركبة من المجموعة.
>>> import numpy as np >>> a = np.array([1, 2+6j, 5, 3.5+5j]) >>> print (a[np.iscomplex(a)]) [2.0+6.j 3.5+5.j]
الإشارة العشوائية
الإشارة العشوائية تستخدم أرقامًا صحيحة للإشارة
الإشارة العشوائية تختلف عن القطع، حيث أنها دائمًا تنسخ البيانات إلى مصفوفة جديدة.
>>> import numpy as np >>> x=np.arange(32).reshape((8,4)) >>> print (x[[4,2,1,7]]) # إدخال أرقام مزدوجة ترتيبية [[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]] >>> print (x[[-4,-2,-1,-7]]) # إدخال أرقام مزدوجة عكسي [[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4 5 6 7]] >>> print (x[np.ix_([1,5,7,2],[0,3,1,2])]) # إدخال عدة أرقام مزدوجة (استخدام np.ix_) [[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]