NumPy هي مكتبة أساسية للحوسبة العلمية بلغة Python، وتُستخدم على نطاق واسع في تطبيقات التعلم الآلي. فيما يلي بعض وظائف NumPy الشائعة التي يتم استخدامها بشكل متكرر في التعلم الآلي:
1. np.array(): تُستخدم هذه الوظيفة لإنشاء مصفوفات NumPy، وهي هياكل البيانات الأساسية المستخدمة في التعلم الآلي.
2. np.zeros(), np.ones(), np.random.rand(), np.random.randn(): يتم استخدام هذه الوظائف لإنشاء صفائف مليئة بالأصفار أو الآحاد أو القيم العشوائية، والتي تُستخدم غالبًا لتهيئة معلمات النموذج أو إنشاء بيانات تركيبية.
3. np.linspace(), np.logspace(): تُستخدم هذه الوظائف لإنشاء صفائف ذات قيم متباعدة بشكل متساوٍ، والتي يمكن أن تكون مفيدة لمهام مثل هندسة الميزات أو التصور.
4. np.reshape(), np.transpose(), np.expand_dims(): تُستخدم هذه الوظائف لمعالجة شكل وأبعاد المصفوفات، وهو أمر ضروري غالبًا عندما العمل مع نماذج التعلم الآلي.
5. np.concatenate(), np.stack(), np.vstack(), np.hstack(): تُستخدم هذه الوظائف لدمج صفائف متعددة على محاور مختلفة، والتي يمكن أن تكون مفيدة لمهام مثل هندسة الميزات أو زيادة البيانات.
6. np.sum(), np.mean(), np.std(), np.var(): تُستخدم هذه الوظائف لحساب الإحصاءات الأساسية خصائص المصفوفات، والتي يمكن أن تكون مفيدة لتحليل البيانات وهندسة الميزات.
7. np.dot(), np.matmul(): تُستخدم هذه الوظائف لإجراء مضاعفة المصفوفات، وهي عملية أساسية في العديد من خوارزميات التعلم الآلي.
8. np.linalg.inv(), np.linalg.eig(), np.linalg.svd(): تُستخدم هذه الوظائف لإجراء عمليات الجبر الخطي، مثل انعكاس المصفوفة، وتحلل القيمة الذاتية، وتحلل القيمة المفردة، وهي أمور مهمة في التعلم الآلي لمهام مثل تقليل الأبعاد وتحسين النموذج.
9. np.argmax(), np.argsort(): تُستخدم هذه الوظائف للعثور على مؤشرات الحد الأقصى أو القيم المصنفة في مصفوفة، والتي يمكن أن تكون مفيدة لمهام مثل التصنيف أو الترتيب .
10. np.where(): تُستخدم هذه الوظيفة لتطبيق المنطق الشرطي على المصفوفات، والتي يمكن أن تكون مفيدة لمهام مثل هندسة الميزات أو المعالجة المسبقة للبيانات.
هذه مجرد أمثلة قليلة على العديد من وظائف NumPy المستخدمة بشكل شائع في التعلم الآلي. ستعتمد الوظائف المحددة المستخدمة على المشكلة المحددة ومتطلبات نموذج التعلم الآلي المستخدم.
الاستشهادات:
[1] https://madewithml.com/courses/foundations/numpy/
[2] https://faculty.washington.edu/otoomet/machinelearning-py/numpy-and-pandas.html
[3] https://www.youtube.com/watch?v=gnKbAAVUzro
[4] https://www.naukri.com/code360/library/important-numpy-functions-for-ml
[5] https://becominghuman.ai/an-essential-guide-to-numpy-for-machine-learning-in-python-5615e1758301?gi=adb6aadca980
كيف يختلف المنتج النقطي لـ NumPy عن ضرب المصفوفة في المكتبات الأخرى
الاختلافات الرئيسية بين وظيفة NumPy `np.dot()` وضرب المصفوفة في المكتبات الأخرى هي:
1. الأبعاد:
- يمكن لـ `np.dot()` التعامل مع صفائف ذات أبعاد مختلفة، وتنفيذ عمليات مختلفة بناءً على أشكال الإدخال.
- بالنسبة للمصفوفات أحادية الأبعاد، يقوم `np.dot()` بحساب المنتج الداخلي.
- بالنسبة للمصفوفات ثنائية الأبعاد، يقوم `np.dot()` بحساب ضرب المصفوفة.
- بالنسبة للمصفوفات ذات الأبعاد الأعلى، ينفذ `np.dot()` حاصل ضرب مجموع على المحور الأخير للوسيطة الأولى والمحور من الثاني إلى الأخير للوسيطة الثانية.
2. الكفاءة :
- تم تحسين `np.dot()` الخاص بـ NumPy بدرجة كبيرة ويستخدم مكتبات BLAS (البرامج الفرعية للجبر الخطي الأساسي) الفعالة تحت الغطاء، مما يجعله سريعًا للغاية.
- قد لا تتمتع المكتبات الأخرى بنفس المستوى من التحسين، خاصة بالنسبة للمصفوفات الكبيرة أو المصفوفات عالية الأبعاد.
3. بناء الجملة :
- في Python 3.5 والإصدارات الأحدث، يمكن استخدام عامل التشغيل `@` لضرب المصفوفات، وهو أكثر سهولة وإيجازًا من استدعاء `np.dot()`.
- قد يكون لدى المكتبات الأخرى بناء الجملة الخاص بها لضرب المصفوفة، والذي قد يختلف عن `np.dot()` الخاص بـ NumPy.
4. المرونة:
- يعتبر `np.dot()` أكثر مرونة في التعامل مع المصفوفات ذات الأبعاد المختلفة، بينما قد يكون لضرب المصفوفات في المكتبات الأخرى متطلبات أكثر صرامة على أشكال الإدخال.
5. اتفاقية التسمية:
- يمكن أن يكون الاسم `np.dot()` مضللًا، لأنه يقوم بإجراء كل من الضرب النقطي والمصفوفة اعتمادًا على أشكال الإدخال.
- قد تحتوي المكتبات الأخرى على أسماء دوال وصفية أكثر، مثل `matrix_multiply()` أو `matmul()`، للتمييز بوضوح بين حاصل الضرب النقطي وضرب المصفوفة.
باختصار، على الرغم من أن العمليات الرياضية الأساسية قد تكون متشابهة، إلا أن وظيفة `np.dot()` الخاصة بـ NumPy توفر تنفيذًا أكثر مرونة وكفاءة لمنتج النقاط وضرب المصفوفات مقارنة بالمكتبات الأخرى، لكن اصطلاح التسمية يمكن أن يكون مربكًا. يساعد إدخال عامل التشغيل `@` في Python 3.5+ في جعل عملية ضرب المصفوفات أكثر سهولة.
الاستشهادات:
[1] https://stackoverflow.com/questions/34142485/difference-between-numpy-dot-and-python-3-5-matrix-multiplication
[2] https://www.w3resource.com/python-exercises/numpy/advanced-numpy-exercise-1.php
[3] https://mkang32.github.io/python/2020/08/30/numpy-matmul.html
[4] https://www.includehelp.com/python/difference-between-numpy-dot-and-inner-methods.aspx
[5] https://numpy.org/doc/stable/reference/generated/numpy.dot.html
هل هناك أي سيناريوهات يتم فيها تفضيل np.dot على @ أو np.matmul
نعم، هناك سيناريوهات يتم فيها تفضيل `np.dot` على `@` أو `np.matmul`. فيما يلي بعض الحالات التي قد يكون فيها `np.dot` أكثر ملاءمة:
1. التوافق مع إصدارات Python الأقدم: يتوفر `np.dot` في جميع إصدارات NumPy، بما في ذلك الإصدارات الأقدم. إذا كنت بحاجة إلى دعم إصدارات Python الأقدم، فإن `np.dot` هو خيار أكثر أمانًا.
2. حالات استخدام محددة: يمكن لـ `np.dot` التعامل مع عمليات معينة لا يقوم بها `@` و`np.matmul`. على سبيل المثال، إذا كنت بحاجة إلى تنفيذ منتج نقطي على طول محور محدد، فيمكن لـ `np.dot` التعامل مع هذا الأمر بسهولة أكبر.
3. سهولة القراءة والوضوح: في بعض الحالات، يمكن أن يؤدي استخدام `np.dot` إلى جعل التعليمات البرمجية أكثر قابلية للقراءة وأسهل للفهم. على سبيل المثال، إذا كنت تقوم بتنفيذ منتج نقطي في تعبير معقد، فإن استخدام `np.dot` يمكن أن يجعل التعليمات البرمجية أكثر إيجازًا وأسهل في المتابعة.
4. الأداء: في بعض الحالات، قد يكون `np.dot` أسرع من `@` أو `np.matmul` نظرًا للطريقة التي يتعامل بها مع عمليات معينة. ومع ذلك، لا يعد هذا مصدر قلق كبير بشكل عام إلا إذا كنت تعمل مع مجموعات بيانات كبيرة جدًا.
5. الكود القديم: إذا كنت تعمل باستخدام كود قديم يستخدم `np.dot`، فقد يكون من الأسهل الالتزام بـ`np.dot` للحفاظ على التوافق وتجنب المشكلات المحتملة عند الترقية إلى الإصدارات الأحدث من NumPy .
فيما يلي بعض السيناريوهات التي قد يتم فيها تفضيل `np.dot` على `@` أو `np.matmul`:
- التوافق مع إصدارات Python الأقدم: إذا كنت بحاجة إلى دعم إصدارات Python الأقدم، فإن `np.dot` هو خيار أكثر أمانًا.
- حالات استخدام محددة: إذا كنت بحاجة إلى تنفيذ منتج نقطي على طول محور محدد، فيمكن لـ `np.dot` التعامل مع هذا الأمر بسهولة أكبر.
- سهولة القراءة والوضوح: في بعض الحالات، يمكن أن يؤدي استخدام `np.dot` إلى جعل التعليمات البرمجية أكثر قابلية للقراءة وأسهل للفهم.
- الأداء: في بعض الحالات، قد يكون `np.dot` أسرع من `@` أو `np.matmul` بسبب الطريقة التي يتعامل بها مع عمليات معينة.
- الكود القديم: إذا كنت تعمل باستخدام كود قديم يستخدم `np.dot`، فقد يكون من الأسهل الالتزام بـ`np.dot` للحفاظ على التوافق وتجنب المشكلات المحتملة عند الترقية إلى الإصدارات الأحدث من NumPy.
باختصار، على الرغم من أن `@` و`np.matmul` أكثر كفاءة وقابلية للقراءة بشكل عام، إلا أن هناك سيناريوهات قد يكون فيها `np.dot` أكثر ملاءمة.
الاستشهادات:[1] https://stackoverflow.com/questions/63628004/whether-to-use-numpys-dot-or-matmul-function
[2] https://stackoverflow.com/questions/34142485/difference-between-numpy-dot-and-python-3-5-matrix-multiplication
[3] https://madewithml.com/courses/foundations/numpy/
[4] https://mkang32.github.io/python/2020/08/30/numpy-matmul.html
[5] https://labex.io/tutorials/python-numpy-dot-function-86429