بايثون-23: مكتبة NumPy الجزء الثاني


السلام عليكم

سنتناول في هذا الدرس المواضيع التالية:

  • انشاء المصفوفات في مكتبة NumPy

  • طباعة المصفوفات

  • العمليات على المصفوفات

 

انشاء المصفوفات

هناك عدة طرق لأنشاء المصفوفات بلغة بايثون ومنها ما تطرقنا له في الدرس السابق من تعريف مكتبة NumPy ثم تعريف متغير على انه مصفوفة وذكر العناصر مباشرة وكما في المثال التالي:

1

كما هو واضح في الصورة اعلاه فقد قمنا بتعريف مصفوفتين احدهما نوعها صحيحة والاخرى عشرية وكلاهما تتكون من بعد واحد (صف واحد او عمود واحد من البيانات) ولتعريف مصفوفات متعددة الابعاد فأن السلسلة الواحدة تعتبر صف واحد وسلسلة السلاسل تعتبر صفوف واعمدة وكذلك سلسلة السلاسل المتكونة من سلاسل تعتبر مصفوفة ثلاثية الابعاد وهكذا:

2

الصورة اعلاه تبين مصفوفتين الاول ابعادها

4*3

والسطر الاخير منها يتكون من اصفار فقط قمنا يتعريفها بأستخدام دالة

zeros()

والمصفوفة الثانية تتكون من ثلاث صفوف وعمودين ونوع عناصرها مركبة حيث قمنا بتعريف نوع العناصر بأستخدام دالة

dtype=complex

بعد الانتهاء من تعداد عناصر المصفوفة.

كما هو معروف في لغات البرمجة فأن المصفوفات قد تكون عناصرها غير معروفة ولكن حجمها يجب ان يتم تعريفه من البداية تجنباً للأرباك الذي قد يحصل فيما بعد حيث ان الذاكرة المخصصة للمصفوفة يجب ان تحجز مسبقاً عند تعريفها (ويشذ عن هذه القاعدة المتجهات vectors في لغة سي بلس بلس حيث يمكن تعريف متجه (بعد واحد) او عدة متجهات (مصفوفة متعددة الابعاد) بدون تحديد الحجم)

وتوفر لغة بايثون عدة طرق لتعريف مصفوفة بدون ذكر عناصرها الحقيقية في البداية بأستخدام دوال

zeros(n,m) :  لتعريف مصفوفة تتكون من اصفار عدد صفوفها (n) وعدد اعمدتها (m)

ones(n,m) نفس الدالة السابقة ولكنها تستخدم لملء المصفوفة بواحدات كقيم اولية يمكن تغييرها فيما بعد.

empty(n,m) وتعمل نفس الدوال السابقة ولكنها تملأ المصفوفة بقيم عشوائية نوعها (float64) وكما في الامثلة التالية:

3

لأنشاء مصفوفة تتكون من ارقام متسلسلة بين قيمتين نستطيع استخدام دالة (arange) التي سبق ان رأيناها في الدرس السابق والتي يشرحها المثال التالي:

4

الدالة الاخرى المستخدمة لتوليد ارقام بين قيمتين والفارق بينهما قيمة ثابتة هي دالة (linspace) وهي نفس الدالة المستخدمة في الماتلاب وبنفس المواصفات وكما في الامثلة التالية:

5

رغم ان هناك الكثير من الادوات الاخرى لأنشاء المصفوفات الا اننا سنكتفي بما شرحناه ونوضح البقية اذا احتجناها اثناء شرح بقية مكونات الكورس.

للأطلاع على كل ادوات مكتبة NumPy يمكن زيارة الرابط التالي:

انقر هنا لزيارة صفحة NumPy على ال GitHub

طباعة المصفوفات

وتتم بعدة طرق بناءاً على نوع المصفوفة (ابعادها) وطريقة العرض التي نريدها (بأستخدام دالة reshape التي ذكرناها سابقاً):

6

لتغيير طريقة عرض المصفوفات يمكن استخدام الايعاز التالي:

set_printoptions(threshold=’nan’)

والذي سيجبر مكتبة NumPy على طباعة المصفوفة كاملة

العمليات على المصفوفات

يمكن اجراء جميع العمليات على المصفوفات التي تدعمها لغات البرمجة الاخرى وكما موضح في الامثلة التالية:

7

وكما هو واضح في المثال السابق فأن علامة الضرب (*) تستخدم لضرب كل عنصر من المصفوفة الاولى في مقابله من المصفوفة الثانية او ما يسمى

element-wise multiplication

ولأجراء الضرب الاعتيادي بين مصفوفتين نستخدم دالة

dot(a,b)

وهذه مجموعة اخرى من الامثلة لتوضيح الفكرة:

8

مجموعة من الدوال الاخرى التي تعمل على المصفوفات تشمل

a+=3  ==> a=a+3

a-=2  ==> a=a-2

b*=a ==> b=b*a

وهكذا

ملاحظة: حين جمع او ظرب او طرح او اجراء اي عملية بين مصفوفتين مختلفة في النوع فالناتج يأخذ النوع الاكبر (او الاكثر شمولاَ) وكمثال اذا ضربنا مصفوفة اعداد صحيحة بمصفوفة اعداد مركبة يكون الناتج مصفوفة اعداد مركبة وهكذا.

a.sum() تعطي ناتج جمع عناصر المصفوفة (a) كلها في رقم واحد

a.min() ترجع قيمة اصغر عنصر في المصفوفة

a.max() ترجع قيمة اكبر عنصر في المصفوفة

كل هذه العمليات تتم على المصفوفة ككل ولكن اذا اردنا ان نقوم بتنفيذها على صفوف فقط او اعمدة فقط فنستخدم دالة (axis) وكما في الامثلة التالية:

9

ملاحظة اخيرة:

المجموعة التراكمي (cumulative sum ) لصف او عمود معناه ان العنصر الاول يبقى نفسه والعنصر الثاني يكون حاصل جمع العنصر الاول والثاني والعنصر الثالث يكون حاصل جمع العنصر الاول والثاني والثالث وهكذا

الى هنا ينتهي درس اليوم على امل ان يكون نافعاً ومفهوماً للجميع وانتظرونا في الدروس القادمة ان شاء الله

اخوكم مصطفى صادق لطيف

 

4 comments

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

شعار وردبرس.كوم

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   /  تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   /  تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   /  تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   /  تغيير )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.