"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن أن تبرر وظائف Numpy المقيدة بكفاءة المصفوفات؟

كيف يمكن أن تبرر وظائف Numpy المقيدة بكفاءة المصفوفات؟

نشر في 2025-03-25
تصفح:475

How Can NumPy's Vectorized Functions Efficiently Justify Arrays?

تبرير صفائف numpy مع وظائف متجهة

يوفر Numpy طرقًا فعالة لتبرير المصفوفات باستخدام وظائف ناقلات ، وتقديم أداء محسّن و Simplicity مقارنةً بالتحول إلى حلقات python التقليدية. عناصر غير صفرية إلى اليسار أو اليمين أو لأعلى أو لأسفل مع الحفاظ على شكلها. defify تبرير (a ، invalid_val = 0 ، axis = 1 ، side = 'left'): إذا كان invalid_val هو np.nan: قناع = ~ np.isnan (أ) آخر: قناع = a! = invalid_val referified_mask = np.sort (قناع ، محور = محور) إذا (الجانب == 'UP') | (الجانب == "اليسار"): referified_mask = np.flip (مبرر_ ماسك ، المحور = المحور) Out = np.full (A.Shape ، invalid_val) إذا كان المحور == 1: Out [referified_mask] = a [قناع] آخر: out.t [referified_mask.t] = a.t [mask.t] ارجع إلى الخارج

هذه الوظيفة تبرر صفيف ثنائي الأبعاد على طول المحور والجانب المحدد (يسار ، يمين ، لأعلى ، لأسفل). إنه يعمل من خلال تحديد عناصر غير صفرية باستخدام القناع ، وفرزها باستخدام الفرز ، وتقليب القناع إذا كان يبرر صعودًا أو يسارًا ، وأخيراً في الكتابة فوق الصفيف الأصلي مع القيم المبررة.

مثال على الاستخدام

np.array ([[1،0،2،0] ، [3،0،4،0] ، [5،0،6،0] ، [0،7،0،8]]) # غلاف اليسار covered_left = تبرير (a ، axis = 1 ، side = 'left') طباعة ("المصفوفة الأصلية:") طباعة (أ) طباعة ("\ ncovered اليسار:") print (cover_left)

الإخراج:

صفيف أصلي: [[1 0 2 0] [3 0 4 0] [5 0 6 0] [0 7 0 8]] غطى اليسار: [[1 2 0 0] [3 4 0 0] [5 6 0 0] [7 8 0 0]]
import numpy as np

def justify(a, invalid_val=0, axis=1, side='left'):    
    if invalid_val is np.nan:
        mask = ~np.isnan(a)
    else:
        mask = a!=invalid_val
    justified_mask = np.sort(mask,axis=axis)
    if (side=='up') | (side=='left'):
        justified_mask = np.flip(justified_mask,axis=axis)
    out = np.full(a.shape, invalid_val) 
    if axis==1:
        out[justified_mask] = a[mask]
    else:
        out.T[justified_mask.T] = a.T[mask.T]
    return out
التبرير لمصفوفة عامة n-dimensial

لتبرير صفيف n-dimensional ، يمكن استخدام الوظيفة التالية: pushax = lambda a: np.moveaxis (a ، axis ، -1) إذا كان invalid_val هو np.nan: قناع = ~ np.isnan (أ) آخر: قناع = a! = invalid_val referified_mask = np.sort (قناع ، محور = محور) إذا كان الجانب == "الجبهة": referified_mask = np.flip (مبرر_ ماسك ، المحور = المحور) Out = np.full (A.Shape ، invalid_val) if (AXIS ==-1) أو (AXIS == A.NDIM-1): Out [referified_mask] = a [قناع] آخر: pushax (Out) [pushax (referified_mask)] = pushax (a) [pushax (mask)] ارجع إلى الخارج

تدعم هذه الوظيفة سيناريوهات أكثر تعقيدًا من خلال تبرير صفيف ثنائي الأبعاد على طول محور تعسفي وإما إلى "الجبهة" أو "نهاية" الصفيف.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3