تنطبق مقارنة أداء Pandas على np.vectorize
لقد لوحظ أن np.vectorize() يمكن أن يكون أسرع بكثير من df. Apply() عند إنشاء عمود جديد بناءً على الأعمدة الموجودة في Pandas DataFrame. ينبع اختلاف الأداء الملحوظ من الآليات الأساسية التي تستخدمها هاتان الطريقتان.
df.apply() vs Python-Level Loops
df.apply() ينشئ بشكل أساسي حلقة على مستوى بايثون تتكرر على كل صف من DataFrame. كما هو موضح في المعايير المتوفرة، فإن الحلقات على مستوى بايثون مثل فهم القائمة والخريطة كلها بطيئة نسبيًا مقارنة بالحسابات الموجهة الحقيقية.np.vectorize() vs df.apply()
np.vectorize() يحول وظيفة محددة من قبل المستخدم إلى وظيفة عالمية (ufunc). تم تحسين Ufuncs بشكل كبير ويمكنها تنفيذ عمليات تعتمد على العناصر على مصفوفات NumPy، مع الاستفادة من التعليمات البرمجية المستندة إلى لغة C والخوارزميات المحسنة. وهذا على النقيض من df.apply()، الذي يعمل على كائنات سلسلة Pandas ويتحمل حملًا إضافيًا.
التوجيه الحقيقي: الأداء الأمثل
لإنشاء عمود فعال حقًا ، يوصى بشدة بإجراء العمليات الحسابية الموجهة داخل NumPy. تعتبر العمليات مثل numpy.where والتقسيم المباشر للعناصر باستخدام df["A"] / df["B"] سريعة للغاية وتتجنب النفقات العامة المرتبطة بالحلقات.Numba Optimization
للحصول على كفاءة أكبر، من الممكن تحسين الحلقات بشكل أكبر باستخدام Numba، وهو مترجم يترجم وظائف Python إلى كود C محسن. يمكن لـ Numba تقليل وقت التنفيذ إلى ميكروثانية، متفوقًا بشكل ملحوظ على كل من df.apply() وnp.vectorize().الاستنتاج
بينما قد تقدم np.vectorize() بعض التحسينات على df.apply()، فهي ليست بديلاً حقيقيًا للحسابات الموجهة في NumPy. لتحقيق أقصى قدر من الأداء، استخدم تحسين Numba أو العمليات الموجهة المباشرة داخل NumPy لإنشاء أعمدة جديدة في Pandas DataFrames.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3