مقالات

4.3: المتجهات في بايثون - الرياضيات


بالنسبة لأولئك الجدد في بايثون ، هناك العديد من الأخطاء الشائعة التي تحدث في هذه الدورة. حاول إصلاح الرموز التالية.

خطأ في بناء الجملة

هذا يعني أن الكود ليس له معنى في بايثون. نود تحديد متجه بأربعة أرقام.

افعل هذا

أصلح الكود التالي لإنشاء ثلاثة متجهات بأربعة أرقام.

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

افعل هذا

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

افعل هذا

كيف فقط قم بتشغيل الأمر التالي لمعرفة ما إذا كنت قد حصلت على (x ) و (y ) و (z ) صحيحًا عند إصلاح الكود أعلاه.

ملحوظة

تأكد من عدم تغييرتحقق من الجوابأوامر. السلسلة الطويلة التي تحتوي على أرقام وحروف هي الرمز السري الذي يشفر الإجابة الصحيحة. يسمى هذا الرمز أيضًا بـ HASH. لا تتردد في إلقاء نظرة علىanswerercheck.pyكود ومعرفة ما إذا كان يمكنك معرفة كيف يعمل؟

نومبي

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

على سبيل المثال ، تستخدم التعليمات البرمجية التاليةnumpy.arrayلتحديد متجه من أربعة عناصر.

Scalars مقابل ناقلات 1

في الرياضيات ، يعتبر المتجه الواحد مقياسًا. لكن في بايثون ، ليسوا متشابهين.

قوائم النواقل

لدينا قائمة بالمصفوفات غير المفككة أو قائمة من القوائم. في هذه الحالة ، يمكن أن يكون للمتجهات أبعاد مختلفة.

افعل هذا

قم بتعديل بيان الطباعة باستخدام الفهرسة لطباعة القيمة 3 فقط من ملفقائمة_المتجهاتالمعرفة أدناه.

الفهرسة

يتم تشغيل فهرس المتجه من 0 إلى (n − 1 ) لـ (n ) - متجه.

افعل هذا

يحاول الكود التالي الحصول على العنصر الثالث منx_npوهو الرقم2.0. أصلح هذا الرمز لتقديم الإجابة الصحيحة.

افعل هذا

استبدل العنصر الثالث فقط منx_npمع الرقم20.0مثل أن القيم الجديدةx_npهو [-1 ، 0 ، 20. ، 3.1]

يوجد فهرس خاص -1 يمثل العنصر الأخير في المصفوفة. توجد عدة طرق للحصول على أكثر من عنصر واحد متتالي.

  • تعطي x_np [1: 3] العنصرين الثاني والثالث فقط. يبدأ بالفهرس الأول وينتهي قبل الفهرس الثاني. إذن ، عدد العناصر هو الفرق بين هذين العددين فقط.

  • x_np [1: -1] هي نفسها x_np [1: 3] لمتجه 4.

  • إذا كنت تريد العنصر الأخير أيضًا ، فلن تحتاج إلى وضع الفهرس ، على سبيل المثال ، x_n [1:] يعطي جميع العناصر باستثناء العنصر الأول. يمكنك أن تفعل نفس الشيء مثل الأول.

افعل هذا

يتم إعطاؤك متجهًا (x_np) من (n ) العناصر ، حدد متجهًا جديدًا (د) بالحجم (n − 1 ) مثل (d_i = x_ {i + 1} - x_i ) لـ (i = 1، dots، n-1 ).

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

التنازل مقابل النسخ

ألق نظرة على الكود التالي.

  • نقوم بإنشاء مصفوفة واحدة صغيرةx_np

  • نحن نسمحy_np = x_np

  • نغير العنصر الثالث منy_np

  • العنصر الثالث منx_npتم تغييره أيضا

يبدو هذا غريبًا وقد لا يكون منطقيًا بالنسبة لأولئك الذين يستخدمون لغات أخرى مثل MATLAB.

والسبب في ذلك هو أننا لا ننشئ نسخة منx_npوتسميته باسمy_np. ما فعلناه هو إعطاء اسم جديدy_npلنفس المجموعةx_np. لذلك ، إذا تم تغيير أحدهما ، وتغير الآخر أيضًا ، لأنهما يشيران إلى نفس المصفوفة.

افعل هذا

هناك طريقة تسمىينسخالتي يمكن استخدامها لإنشاء مجموعة جديدة. يمكنك البحث عن كيفية عمله وإصلاح الكود أدناه. إذا تم ذلك بشكل صحيحx_npيجب أن يبقى المتجه كما هو وy_npأنت الآن[-1 0 2 3.1].

متجه المساواة في numpy والقائمة

المشغل العلائقي (==,<,>,!=، وما إلى ذلك) للتحقق مما إذا كانت المتجهات هي نفسها أم لا. ومع ذلك ، سوف يتصرفون بشكل مختلف إذا تم مقارنة الكودnumpy.arrayكائنات أو أقائمة. فيحبيبي، فيحبيبيتتحقق العوامل العلائقية من المساواة لكل عنصر فيمجموعة مصفوفة. إلى عن علىقائمة، تتحقق العوامل العلائقية من جميع العناصر.

نواقل صفرية وناقلات الآحاد في numpy

  • الأصفار (n) تنشئ متجهًا بكل الأصفار

  • واحد (ن) ينشئ متجهًا مع كل الآحاد

افعل هذا

قم بإنشاء متجه صفري (يسمى0_np) بنفس أبعاد المتجهx_np. قم بإنشاء متجه واحد (يسمىمنها + np) أيضًا بنفس أبعاد المتجهx_np.

نواقل عشوائية

  • random.random (n) تنشئ متجهًا عشوائيًا بأبعاد (n ).

الجمع والطرح المتجه

في هذا القسم ، ستفهم سبب استخدامنا numpy لعمليات الجبر الخطي. إذا كانت x و y مصفوفتان غير متكتلتين بالحجم نفسه ، فيمكننا الحصول على x + y و x-y لجمعهما وطرحهما على التوالي.

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

افعل هذا

قم بتعديل التعليمات البرمجية التالية لإضافة وطرح القائمتين بشكل صحيح.

تلميح من المقبول تمامًا ألا تكتب وظيفتك الخاصة ، فحاول أن تكون قادرًا على عرض القوائم كمصفوفات:

إضافة متجه عددي

تعني إضافة المتجه القياسي أن الحجمي (أو المتجه 1) يضاف إلى جميع عناصر المتجه.

افعل هذا

أضف 20.20 قياسي لجميع عناصر المتجه التاليx_npوتخزين النتيجة مرة أخرى فيx_np

الضرب والقسمة عددي المتجه

متيأهو عددي وxيكونحبيبيمجموعة مصفوفة. يمكننا التعبير عن الضرب المتجه العددي كـفأسأوx * أ.

يمكننا أيضًا إجراء تقسيم متجه عددي لـس / أأوفأس. (لاحظ أنس / أوفأسمختلفة)

افعل هذا

قسّم كل عناصر المتجه التاليx_npبواسطة20.20ووضعها فيهy_np

العمليات الحكيمة

كما هو مذكور أعلاه العلاقات العلائقية علىحبيبييتم تنفيذ المصفوفات من حيث العناصر. الأمثلة التي ذكرناها من قبل هي

  • ال==المشغل أو العامل

  • الاضافة+والطرح-

ملحوظة

لكي يعمل هذا ، يجب أن يكون المتجهان بنفس الأبعاد.

إذا لم يكن لهما نفس البعد ، مثل الحجمي والمتجه ، فيمكننا التفكير في توسيع الحجم ليكون له نفس البعد مثل المتجه وتنفيذ العمليات. فمثلا.

  • الجمع والطرح العددي المتجه

  • الضرب والقسمة المتجهية العددية

افعل هذا

افترض أنك استثمرت ثلاثة أصول بقيم أولية مخزنة فيهاp_initial، وبعد أسبوع واحد ، يتم تخزين قيمها فيp_final. ثم ما هي نسبة عودة الأصول (ص) لهذه الأصول الثلاثة (أي تغير السعر على القيمة الأولية).

تركيبة خطية

لدينا متجهان (x ) و (y ) يمكننا الحصول على التركيبة الخطية لهذين المتجهين مثل (ax + by ) حيث (a ) و (b ) معاملات عددية.

في المثال التالي ، لدينا متجهان (x_npوy_np) ، واثنين من عددي (ألفاوبيتا) ، نحصل على التركيبة الخطيةalpha * x_np + beta * y_np.

يمكننا أيضًا تحديد وظيفةلينكومبلأداء الجمع الخطي.

افعل هذا

قم بإنهاء الكود التالي لـ lincomb وقارن النتائج التي حصلنا عليها للتو.

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

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


على غرار النقاط ثلاثية الأبعاد ، يتم تخزين المتجهات ثلاثية الأبعاد على هيئة هياكل Vector3d. يمكن اعتبارها قائمة صفرية أحادية البعد تحتوي على ثلاثة أرقام. تمثل هذه الأرقام الثلاثة اتجاه إحداثيات X و Y و Z للمتجه.

إليك طريقة سهلة لإنشاء متجه:

يمكن الوصول إلى إحداثيات Vector3d في شكل قائمة ، عنصر واحد في كل مرة:

يمكن أيضًا الوصول إلى إحداثيات Vector3d من خلال خصائص .X و. Y و. Z:

لتغيير الإحداثي الفردي لـ Vector3d ، ما عليك سوى تعيين قيمة جديدة للتنسيق من خلال موقع الفهرس أو خاصية الإحداثيات:

للعثور على المتجه بين نقطتين ، استخدم الطرح المتجه:

في المثال أعلاه ، ينتقل المتجه من النقطة 1 إلى النقطة 2. عكس هذا الاتجاه هو خطأ شائع. من المهم التأكد من أن نقطة البداية يتم تتبعها من نقطة النهاية.

يمكن أيضًا إضافة المتجهات إلى النقاط لإنشاء مواقع نقطة جديدة. فيما يلي مثال على تحريك موقع نقطة بواسطة متجه:

استخدم حلقة for للتجول في كل إحداثي على التوالي:

يحتوي RhinoScriptSyntax على عدد من الطرق لمعالجة النواقل. راجع مناهج RhinoScript وأساليب المتجهات للحصول على التفاصيل.


2.1 المقاييس والمتجهات والمصفوفات والموترات

لنبدأ ببعض التعريفات الأساسية:

$ بكالوريوس = ابدأ x_1 x_2 cdots x_n end $

  • الحجميات مكتوبة بأحرف صغيرة ومائلة. على سبيل المثال: $ n $
  • المتجهات مكتوبة بأحرف صغيرة ومائلة ونوع غامق. على سبيل المثال: $ bs$
  • المصفوفات مكتوبة بأحرف كبيرة ومائلة وغامقة. على سبيل المثال: $ bs$

مثال 1.

أنشئ متجهًا باستخدام Python و Numpy

نصيحة الترميز: على عكس دالة matrix () التي تنشئ بالضرورة مصفوفات أبعاد $ 2 $ ، يمكنك إنشاء مصفوفات $ n $ -dimensionnal باستخدام الدالة array (). الميزة الرئيسية لاستخدام المصفوفة () هي الطرق المفيدة (النقل المترافق ، المعكوس ، عمليات المصفوفة ...). سنستخدم الدالة array () في هذه السلسلة.

سنبدأ بإنشاء ناقل. هذه فقط مصفوفة أبعادها $ 1 $:

مثال 2.

أنشئ مصفوفة (3 × 2) بأقواس متداخلة

يمكن أن تنشئ الدالة array () أيضًا مصفوفات أبعادها $ 2 $ بأقواس متداخلة:

شكل

يخبرك شكل المصفوفة (أي أبعادها) بعدد القيم لكل بُعد. بالنسبة للمصفوفة ذات الأبعاد $ 2 $ ، ستعطيك عدد الصفوف وعدد الأعمدة. لنجد شكل المصفوفة السابقة ذات الأبعاد A $ 2 $. نظرًا لأن A عبارة عن مصفوفة Numpy (تم إنشاؤها باستخدام وظيفة المصفوفة ()) ، يمكنك الوصول إلى شكلها باستخدام:

دعونا نتحقق من شكل المتجه الأول لدينا:

كما هو متوقع ، يمكنك أن ترى أن $ bs$ له بعد واحد فقط. الرقم يتوافق مع طول المصفوفة:


التركيب

هناك طرق متعددة لإنشاء مثيلات المتجهات الخاصة بنا باستخدام وحدة المتجهات.

يمكننا أولاً تهيئة بعض المتجهات والنقاط باستدعاء مُتكوِّن الطبقة التكرارية على النحو التالي.

يمكننا أيضًا إنشاء مثيل Point أو مثيل Vector بقائمة باستخدام طريقة class from_list ().

يمكننا أيضًا إنشاء متجهات لدينا من مثيلين نقطيين باستخدام classmethod from_points ().

يمكننا أيضًا الوصول إلى مصفوفة المتجهات لاستخدامها مع مكتبات أخرى.


ما هو المتجه؟

وفقًا لـ Google ، المتجه هو كمية لها اتجاه بالإضافة إلى الحجم ، خاصةً عند تحديد موضع نقطة في الفضاء بالنسبة إلى أخرى.

تعتبر المتجهات مهمة جدًا في التعلم الآلي لأنها لا تصف فقط الحجم ولكن أيضًا اتجاه الميزات. يمكننا إنشاء متجه في NumPy باستخدام مقتطف الكود التالي:

row_vector = np.array & # 40 & # 91 1، 2، 3 & # 93 & # 41
طباعة & # 40 row_vector & # 41

في مقتطف الشفرة أعلاه ، أنشأنا متجهًا للصف. يمكننا أيضًا إنشاء متجه عمود على النحو التالي:

صنع مصفوفة

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

على الرغم من أن المصفوفة تشبه تمامًا المصفوفة متعددة الأبعاد ، هيكل بيانات المصفوفة غير مستحسن لسببين:

  1. المصفوفة هي المعيار عندما يتعلق الأمر بحزمة NumPy
  2. تُرجع معظم العمليات باستخدام NumPy مصفوفات وليس مصفوفة

استخدام مصفوفة متفرقة

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

دعنا ننشئ مصفوفة شرارة هنا:

original_matrix = np.array & # 40 & # 91 & # 91 1، 0، 3 & # 93، & # 91 0، 0، 6 & # 93، & # 91 7، 0، 0 & # 93 & # 93 & رقم 41
sparse_matrix = sparse.csr_matrix & # 40 original_matrix & # 41
print & # 40 sparse_matrix & # 41

لفهم كيفية عمل الكود ، سنلقي نظرة على الإخراج هنا:

في الكود أعلاه ، استخدمنا وظيفة NumPy لإنشاء ملف صف متناثر مضغوط مصفوفة حيث يتم تمثيل العناصر غير الصفرية باستخدام الفهارس الصفرية. هناك أنواع مختلفة من المصفوفات المتناثرة ، مثل:

لن نتعمق في المصفوفات المتفرقة الأخرى هنا ، لكننا نعلم أن كلًا منها محدد ولا يمكن وصف أحد بأنه "الأفضل".

تطبيق العمليات على جميع عناصر المتجه

إنه سيناريو شائع عندما نحتاج إلى تطبيق عملية مشتركة على عناصر متجهية متعددة. يمكن القيام بذلك عن طريق تحديد لامدا ثم توجيه نفس الشيء. دعونا نرى بعض مقتطفات الشفرة لنفسه:

mul_5 = لامدا س: س * 5
vectorized_mul_5 = np.vectorize & # 40 mul_5 & # 41

لفهم كيفية عمل الكود ، سنلقي نظرة على الإخراج هنا:

في مقتطف الشفرة أعلاه ، استخدمنا وظيفة vectorize التي تعد جزءًا من مكتبة NumPy ، لتحويل تعريف لامدا بسيط إلى وظيفة يمكنها معالجة كل عنصر من عناصر المتجه. من المهم أن نلاحظ أن vectorize هو مجرد حلقة فوق العناصر وليس له تأثير على أداء البرنامج. يسمح NumPy أيضًا بامتداد البث، مما يعني أنه بدلاً من الشفرة المعقدة أعلاه ، كان بإمكاننا القيام بما يلي ببساطة:

وكانت النتيجة هي نفسها تمامًا. كنت أرغب في إظهار الجزء المعقد أولاً ، وإلا كنت ستتخطى القسم!

يعني ، التباين والانحراف المعياري

باستخدام NumPy ، من السهل إجراء العمليات المتعلقة بالإحصاءات الوصفية للمتجهات. يمكن حساب متوسط ​​المتجه على النحو التالي:

يمكن حساب تباين المتجه على النحو التالي:

يمكن حساب الانحراف المعياري للمتجه على النحو التالي:

ناتج الأوامر المذكورة أعلاه على المصفوفة المعطاة هنا:

تحويل المصفوفة

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

في الوقت الحالي ، سنجد السلام بمجرد تبديل مصفوفة. من السهل جدًا الوصول إلى تبديل المصفوفة باستخدام NumPy:

ناتج الأمر أعلاه على المصفوفة المعطاة هنا:

يمكن إجراء نفس العملية على متجه الصف لتحويله إلى متجه عمود.

تسطيح المصفوفة

يمكننا تحويل مصفوفة إلى مصفوفة أحادية البعد إذا أردنا معالجة عناصرها بطريقة خطية. يمكن القيام بذلك باستخدام مقتطف الشفرة التالي:

ناتج الأمر أعلاه على المصفوفة المعطاة هنا:

لاحظ أن المصفوفة المسطحة هي مصفوفة ذات بعد واحد ، ببساطة خطية في الموضة.

حساب القيم الذاتية والمتجهات الذاتية

يتم استخدام المتجهات الذاتية بشكل شائع في حزم التعلم الآلي. لذلك ، عندما يتم تقديم دالة التحويل الخطي كمصفوفة ، فإن X ، المتجهات الذاتية هي المتجهات التي تتغير فقط في مقياس المتجه ولكن ليس اتجاهه. يمكننا القول بأنه:

هنا ، X هي المصفوفة المربعة و تحتوي على القيم الذاتية. أيضا ، v يحتوي على المتجهات الذاتية. باستخدام NumPy ، من السهل حساب القيم الذاتية والمتجهات الذاتية. إليك مقتطف الشفرة حيث نوضح نفس الشيء:

ناتج الأمر أعلاه على المصفوفة المعطاة هنا:

المنتجات النقطية من النواقل

المنتجات النقطية للمتجهات هي طريقة لضرب متجهين. يخبرك عن كم من المتجهات في نفس الاتجاه، على عكس حاصل الضرب الاتجاهي الذي يخبرك بالعكس ، مدى ضآلة المتجهات في نفس الاتجاه (يسمى المتعامد). يمكننا حساب حاصل الضرب القياسي لمتجهين كما هو موضح في مقتطف الشفرة هنا:

a = np.array & # 40 & # 91 3، 5، 6 & # 93 & # 41
ب = np.array & # 40 & # 91 23 ، 15 ، 1 & # 93 & # 41

يتم عرض إخراج الأمر أعلاه على المصفوفات المعطاة هنا:

جمع وطرح وضرب المصفوفات

تعد إضافة وطرح المصفوفات المتعددة عملية مباشرة في المصفوفات. هناك طريقتان يمكن من خلالها القيام بذلك. لنلقِ نظرة على مقتطف الشفرة لإجراء هذه العمليات. لغرض الحفاظ على هذا الأمر بسيطًا ، سنستخدم نفس المصفوفة مرتين:

بعد ذلك ، يمكن طرح مصفوفتين على النحو التالي:

ناتج الأمر أعلاه على المصفوفة المعطاة هنا:

كما هو متوقع ، تتم إضافة / طرح كل عنصر في المصفوفة مع العنصر المقابل. يشبه ضرب المصفوفة إيجاد حاصل الضرب النقطي كما فعلنا سابقًا:

سيجد الكود أعلاه قيمة الضرب الحقيقية لمصفوفتين ، على النحو التالي:

ناتج الأمر أعلاه على المصفوفة المعطاة هنا:

استنتاج

في هذا الدرس ، مررنا بالعديد من العمليات الحسابية المتعلقة بالمتجهات والمصفوفات والمصفوفات التي يشيع استخدامها في معالجة البيانات والإحصاءات الوصفية وعلوم البيانات. كان هذا درسًا سريعًا يغطي فقط الأقسام الأكثر شيوعًا والأكثر أهمية من مجموعة متنوعة من المفاهيم ، ولكن يجب أن تعطي هذه العمليات فكرة جيدة جدًا حول ما يمكن إجراء جميع العمليات أثناء التعامل مع هياكل البيانات هذه.

يرجى مشاركة تعليقاتك بحرية حول الدرس على Twitter معlinuxhint وsbmaggarwal (هذا أنا!).

نبذة عن الكاتب

شوبهام أجروال

أنا مهندس Java EE ولدي حوالي 4 سنوات من الخبرة في بناء منتجات عالية الجودة. لدي مهارات ممتازة في حل المشكلات في Spring Boot و Hibernate ORM و AWS و Git و Python وأنا عالم بيانات ناشئ.


إنشاء ناقلات في دروس بايثون

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

ثلاثة أبعاد

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

المتجه أعلاه في مستوى ثنائي الأبعاد. ومع ذلك ، يمكننا تمثيل المتجهات في أي عدد من الأبعاد ، باستثناء 1D.

تمثيل بياناتنا في شكل متجه

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

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

الكتابة

Python هي لغة برمجة مكتوبة ديناميكيًا. هذا يعني أننا لسنا بحاجة إلى تحديد نوع المتغيرات والوسيطات الخاصة بنا وما إلى ذلك. ومع ذلك ، يمكننا (منذ python 3.5) توفير نوع ولكن فقط كتلميح. لن يتم فرضه أبدًا بواسطة Python ، ولكن يمكننا استخدام أدوات التحقق من جهات خارجية مثل mypy للتحقق مما إذا كان الكود الخاص بنا صحيحًا. هذا مفيد إذا أردنا توخي الحذر بشأن الأنواع التي نستخدمها في التعليمات البرمجية الخاصة بنا. اليك مثال بسيط.

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

اكتب الاسم المستعار

نوع الاسم المستعار هو ببساطة إنشاء اسم مستعار لنوع محدد. على سبيل المثال ، سوف نتعلم المتجهات في هذه المقالة. نحن نعلم أن المتجه عبارة عن قائمة من الأرقام ، ويفضل أن تكون أرقام الفاصلة العائمة. ومن ثم نقوم بتعيين قائمة بأرقام الفاصلة العائمة كمتجه.

من الآن فصاعدًا ، يمكننا كتابة موجهات تلميح باستخدام Vector. ستلاحظ أيضًا لعبة الداما التابعة لجهة خارجية.

يجزم

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

هنا ، حددنا إضافة دالة تأخذ قيمتين num1 و num2. تقوم بإرجاع num1 + num2. يمكننا استخدام التأكيد للتحقق مما إذا كانت وظيفتنا تعمل على النحو المنشود. نعلم أن مجموع 1 و 2 يجب أن يكون 3. عندما نقوم بتشغيل الكود ، فإن الكلمة الأساسية assert تعمل على وظيفة الإضافة مع 1 و 2 كوسيطات. ثم سيتحقق مما إذا كانت القيمة التي تم إرجاعها تساوي 3. إذا كانت كذلك ، فسيعمل الرمز بشكل جيد. إذا لم يكن الأمر كذلك ، فسنحصل على خطأ التأكيد "لا يعمل". هذه طريقة مفيدة لاختبار الكود الخاص بنا. سنستخدم التأكيد في هذا البرنامج التعليمي لأننا نريد التأكد من صحة الوظائف التي نكتبها. وإلا فسيكون من الصعب اكتشافه من القيمة التي تم إرجاعها.

خلق متجه

نرى بالفعل كيف استخدمنا اسم مستعار لإنشاء نوع المتجه. الآن دعونا في الواقع نقوم بإنشاء متجه.

هل كان ذلك بسيطًا جدًا؟ حسنًا ، هذا كل ما يتطلبه الأمر. لقد حددنا قائمة العوامات كمتجه. لذلك ، نجحنا في إنشاء المتجه الأول لدينا. ما نحتاج إلى فعله الآن هو إنشاء جميع وظائف هذا المتجه حتى نتمكن بالفعل من إجراء عمليات المتجهات. لنبدأ بإضافة المتجهات.

إضافة المتجه

أثناء إضافة متجهين أو أكثر ، نضيف العناصر المقابلة. إذا كانت النواقل ذات طول غير متساوٍ ، فلا يمكن الجمع.

شاهد كيف استخدمنا Vector كنوع تلميح أثناء تحديد وظيفتنا. استخدمنا التأكيد للتحقق مما إذا كانت متجهاتنا لها نفس الطول. ينشئ الرمز zip () قائمة جديدة تحتوي على مجموعات من القيم لها نفس الفهرس في القائمة / المتجه v و w. يتم الوصول إلى كل مجموعة في هذه القائمة الجديدة ويتم جمع قيمها. يمكن للمرء أن يقرأ عن قائمة الفهم في برنامجنا التعليمي البرمجة Pythonic.

الطرح المتجه

سيكون الرمز مشابهًا لإضافة المتجه. بدلاً من إضافة كل عنصر ، نطرح كل عنصر.

الضرب القياسي

يمكن تحقيق الضرب القياسي ببساطة عن طريق ضرب المتجه برقم. إنها وظيفة بسيطة.

المنتج نقطة

لإيجاد حاصل الضرب القياسي لمتجهين ، نجد مجموع حاصل ضرب كل عنصر من العناصر المقابلة. يجب أن تكون المتجهات متساوية الطول.

يقبل المجموع () قائمة القيم ويعيد مجموعها. قائمة الفهم v_i * w_i لـ v_i ، w_i في zip (v ، w) تنشئ قائمة بمنتجات كل عنصر مناظر.

إيجاد المقدار

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

الآن علينا إيجاد الجذر التربيعي لحساب المقدار.

إيجاد المسافة بين متجهين

المسافة بين المتجهين هي الجذر التربيعي لمجموع مربعات الفروق بين العناصر المقابلة. لدينا بالفعل دالة مقدار والتي تجد الجذر التربيعي لمجموع المربعات. كل ما يتعين علينا القيام به هو استخدام دالة vector_subtrataction لإيجاد اختلاف العناصر المقابلة وتمريرها كوسيطة لدالة الحجم.

استنتاج

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

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


متجهات الوحدة هي متجهات لها نفس اتجاهات المتجه العادي ولكن حجمها يساوي 1. هذه المتجهات مهمة للغاية لتنفيذ عمليات متعددة في مساحة ثلاثية الأبعاد. نظرًا لعدم وجود طريقة متاحة لتحويل المتجه إلى شكل عادي ، يتعين علينا & # 8217 استخدام طريقة sum () للمصفوفة numpy.

ناتج الضرب القياسي المتجه أعلاه في بيثون هو:

توضيح:

أولاً ، نقوم باستيراد الفئات الضرورية وتهيئة المصفوفة الوهمية x. حجم هذه المصفوفة لا يساوي 1. لتحويلها إلى 1 ، نجد أولاً مقدارها ونقسمها. (x ** 2) .sum () ** 0.5 لإيجاد مقدار المتجه x.


فهرسة منطقية

دعنا نفكر في مثال حيث لدينا بعض البيانات في مصفوفة ومجموعة من الأسماء مكررة. سأستخدم هنا وظيفة randn في numpy.random لإنشاء بعض البيانات العشوائية الموزعة بشكل طبيعي:

الشكل 4-2. صفيف ثنائي الأبعاد تشريح

لنفترض أن كل اسم يتوافق مع صف في مصفوفة البيانات وأردنا تحديد جميع الصفوف ذات الاسم المقابل "بوب". مثل العمليات الحسابية ، يتم أيضًا توجيه المقارنات (مثل ==) مع المصفوفات. وبالتالي ، فإن مقارنة الأسماء بالسلسلة "Bob" ينتج عنها مصفوفة منطقية:

يمكن تمرير هذه المصفوفة المنطقية عند فهرسة المصفوفة:

يجب أن تكون المصفوفة المنطقية بنفس طول المحور الذي تقوم بفهرسته. يمكنك أيضًا مزج المصفوفات المنطقية ومطابقتها مع الشرائح أو الأعداد الصحيحة (أو تسلسل الأعداد الصحيحة ، المزيد حول هذا لاحقًا):

لتحديد كل شيء ما عدا "بوب" ، يمكنك إما استخدام! = أو إلغاء الشرط باستخدام -:

عند تحديد اثنين من الأسماء الثلاثة للجمع بين العديد من الشروط المنطقية ، استخدم عوامل حسابية منطقية مثل & amp (و) و | (أو):

تحديد البيانات من مصفوفة عن طريق فهرسة منطقية دائما يقوم بإنشاء نسخة من البيانات ، حتى لو لم يتغير المصفوفة التي تم إرجاعها.

حذر

كلمات Python الأساسية و / أو لا تعمل مع المصفوفات المنطقية.

يعمل تعيين القيم باستخدام المصفوفات المنطقية بطريقة منطقية. لتعيين جميع القيم السالبة في البيانات على 0 ، نحتاج فقط إلى القيام بما يلي:

من السهل أيضًا تعيين صفوف أو أعمدة كاملة باستخدام مصفوفة منطقية 1D:


تحويل مصفوفة (مصفوفة ثنائية الأبعاد) وترميزها

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

يؤدي تحويل مصفوفة إلى تحويل متجه الصف إلى متجه عمود والعكس صحيح ، يتم الإشارة إليه بواسطة الحرف العلوي T:

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

وإذا لم تكن المصفوفة مربعة ، فإليك كيفية تغير شكل المصفوفة:


متجه الرياضيات

نادرًا ما يتم إنشاء الكائنات في التصميمات الحسابية بشكل صريح في موضعها وشكلها النهائيين ، وغالبًا ما يتم ترجمتها وتدويرها ووضعها بطريقة أخرى بناءً على الهندسة الحالية. تعمل Vector Math كنوع من السقالات الهندسية لإعطاء الاتجاه والتوجيه للهندسة ، وكذلك لتصور الحركات من خلال الفضاء ثلاثي الأبعاد دون تمثيل مرئي.

في أبسط صوره ، يمثل المتجه موضعًا في الفضاء ثلاثي الأبعاد ، وغالبًا ما يُنظر إليه على أنه نقطة نهاية السهم من الموضع (0 ، 0 ، 0) إلى هذا الموضع. يمكن إنشاء النواقل بامتداد بواسطة إحداثيات المُنشئ ، مع أخذ الموضع x و y و z لكائن Vector الذي تم إنشاؤه حديثًا. لاحظ أن كائنات المتجه ليست كائنات هندسية ، ولا تظهر & # x2019t في نافذة Dynamo. ومع ذلك ، يمكن طباعة معلومات حول ناقل تم إنشاؤه أو تعديله حديثًا في نافذة وحدة التحكم:

يتم تحديد مجموعة من العمليات الحسابية على كائنات المتجهات ، مما يسمح لك بإضافة ، وطرح ، ومضاعفة ، ونقل الكائنات بطريقة أخرى في مساحة ثلاثية الأبعاد كما يمكنك نقل الأرقام الحقيقية في مساحة 1D على خط الأعداد.

تُعرَّف إضافة المتجه على أنها مجموع مكونات متجهين ، ويمكن اعتبارها متجهًا ناتجًا إذا تم وضع سهمي المتجهين المكونين & # x201Ctip إلى الذيل. & # x201D إضافة المتجه تتم باستخدام يضيف طريقة ويمثلها الرسم التخطيطي على اليسار.

وبالمثل ، يمكن طرح كائنين متجهين من بعضهما البعض باستخدام طرح او خصم طريقة. يمكن اعتبار طرح المتجه على أنه الاتجاه من المتجه الأول إلى المتجه الثاني.

يمكن اعتبار ضرب المتجهات على أنه تحريك نقطة نهاية المتجه في اتجاهه بواسطة عامل قياس معين.

غالبًا ما يكون ذلك & # x2019s مطلوبًا عند قياس متجه ليكون المتجه الناتج & # x2019s مساويًا تمامًا للمبلغ المقاس. يمكن تحقيق ذلك بسهولة من خلال تسوية المتجه أولاً ، وبعبارة أخرى تعيين طول المتجه & # x2019s مساوياً تمامًا لواحد.

لا يزال c يشير في نفس الاتجاه مثل a (1 ، 2 ، 3) ، على الرغم من أن طوله الآن يساوي 5 بالضبط.

توجد طريقتان إضافيتان في رياضيات المتجهات التي لا تحتوي & # x2019t على أوجه تشابه واضحة مع الرياضيات أحادية الأبعاد ، والضرب التبادلي وحاصل الضرب النقطي. حاصل الضرب التبادلي هو وسيلة لتوليد متجه متعامد (عند 90 درجة إلى) لمتجهين موجودين. على سبيل المثال ، حاصل الضرب العرضي للمحاور x و y هو المحور z ، على الرغم من أن متجهي الإدخال لا يجب أن يكونا متعامدين مع بعضهما البعض. يتم حساب متجه المنتج المتقاطع باستخدام يعبر طريقة.

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


شاهد الفيديو: شرح اساسيات لغة بايثون 3: الدرس السابع (شهر اكتوبر 2021).