vdot تجمع بعد التسطيح ومرافقة الأول. [1]
افصل نوع الطلب عن شكل المدخل
vdot تسطح المدخلين وترافق الأول المركب؛ dot ثنائية الأبعاد تحسب ضرب المصفوفات. [1][2]
قد يصل مدخلان مربّعان إلى إجراء يعيد عددًا واحدًا، أو إلى إجراء يعيد جدولًا. لذلك نكتب اسم الاستدعاء وشكل الخرج ونوعه مع الجواب، ثم نراجع أي أزواج من القيم ضربها.
الأعداد مؤلفة بلا وحدة وليست قياسات. نستخدم j في الشيفرة للجزء التخيلي، ونقرأ عناصر المثال صفًا فصفًا من اليسار إلى اليمين داخل كل صف.
ثلاثة مخرجات للمدخلين
أنشأنا A=np.array([[2-1j,-3+2j],[1+4j,-2j]],dtype=np.complex128)، وB=np.array([[-1+3j,4-2j],[2+1j,-2+5j]],dtype=np.complex128). شكل كل منهما (2,2)، في NumPy 2.3.5 على CPython 3.12.14.
شغّلنا np.vdot(A,B)، فسجلنا −25−8j من complex128 وشكل (). هذا خرج مفرد، لا مصفوفة ذات أربعة مواضع. لم نضف محورًا لعرضه داخل بطاقة النتائج.
في ترتيب مثالنا المسطح، مساهمات ضرب مرافق عناصر A بعناصر B المناظرة هي −5+5j و−16−2j و6−7j و−10−4j. مجموع الأجزاء الحقيقية −5−16+6−10=−25، والتخيلية 5−2−7−4=−8.
أنشأنا av=np.array([2-1j,-3+2j,1+4j,-2j],dtype=np.complex128)، وbv=np.array([-1+3j,4-2j,2+1j,-2+5j],dtype=np.complex128). لكل منهما الشكل (4,). np.dot(av,bv) أعادت 1+34j من complex128 وشكل ().
هذه dot ذات البعد الواحد لا ترافق المدخل الأول. [2]
مساهمات التحكم غير المرافق في حسابنا هي 1+7j و−8+14j و−2+9j و10+4j. مجموعها 1+34j، مختلف عن −25−8j؛ نقل القيم إلى متجهين لا يجعل اختيار الإجراءين واحدًا.
ثم شغّلنا np.dot(A,B) على المصفوفتين الأصليتين. سجلنا [[−7+8j,2−27j],[−11−5j,22+18j]] من complex128 وشكل (2,2). تغير نوع تنظيم الجواب أيضًا عن الخرجين المفردين.
في خانة (0,0) من ضرب المصفوفتين، نحسب (2−j)(−1+3j)+(−3+2j)(2+j)=(1+7j)+(−8+j)=−7+8j. الأزواج هنا من صف A وعمود B؛ ليست الأربعة المناظرة في مجموع vdot.
راجع المرافق والترتيب والضرب الذاتي
أخذ مرافق المدخل الأول جزء من تعريف vdot المركبة. [1]
للعنصرين (x+yj) و(u+vj)، يعطي ضرب مرافق الأول جزءًا حقيقيًا xu+yv وتخيليًا xv−yu. نجمع الأجزاء بأعداد Python الصحيحة. [1]
عند تبديل العنصرين، الجزء الحقيقي ux+vy هو نفسه، والجزء التخيلي uy−vx سالب السابق. هذه هوية في مرجعنا؛ لا نفترض تبديلية الجواب المركب دون فحص الجزأين.
شغّلنا np.vdot(B,A)، فأعادت −25+8j من complex128 وشكل (). الجزء الحقيقي بقي −25، والتخيلي انعكست إشارته من −8 إلى 8؛ لذلك لم يعط تبديل المدخلين العدد نفسه في هذا المثال.
ثم شغّلنا np.vdot(A,A) وnp.vdot(B,B). الأول 39+0j والثاني 64+0j، بنوع complex128 وشكل (). لا نكتب float64 بدل النوع المسجل لأن العرض يحتوي على صفر تخيلي.
في مرجع الضرب الذاتي، نضع u=x وv=y؛ يصبح الجزء الحقيقي x²+y² والتخيلي xy−yx=0. لأجزاء A نحصل على 5+13+17+4=39، ولأجزاء B نحصل على 10+20+5+29=64.
هذه الأعداد تجمع أجزاء المثال، ولا تمثل طاقة جهاز أو جودة نموذج. وقارنا بايتات A وB قبل الاستدعاءات وبعدها فكانت ثابتة؛ لم نفحص نتائج الكتابة في ذاكرة مشتركة.

حساب مستقل ونطاق الفحص
يحفظ المرجع كل عنصر كزوج من عددين صحيحين. لا يضرب أعداد Python المركبة ولا يستدعي مرافقتها، ولا يستخدم vdot أو dot أو flatten أو reshape أو trace أو norm أو اختزال NumPy داخل الحساب المرجعي.
لضرب المصفوفات في المرجع نقرأ صف A وعمود B بعناوين معلنة، ونحسب مساهمتين غير مرافقتين لكل خانة. وللمجموعين المفردين نقرأ المواضع الأربعة المتناظرة، مع اختلاف إشارة حدّي الجزء التخيلي والحقيقي حسب المسار.
عددنا المصفوفات ذات العناصر الأربعة التي تختار كل عنصر من الأزواج (−1,0) و(0,1) و(2,−1). لدينا 3**4=81 مصفوفة لكل مدخل، و81×81=6561 زوجًا مرتبًا.
لكل زوج ستة فحوص: vdot المرجعية؛ وdot على المتجهين الصريحين؛ وdot المصفوفية؛ وvdot بالعكس مع علاقة الجزأين؛ والضربان الذاتيان مع مجموع المربعات؛ وثبات بايتات المدخلين. نراجع النوع والشكل والقيم في فحوص المخرجات.
أضفنا الفحوص الستة نفسها للمثال المعروض. الإجمالي 6561×6+6=39372، ومرت كلها. قارنّا الأجزاء مساواةً عددية دون سماح لأن المدخلات الصحيحة الأجزاء صغيرة في الشبكة؛ لا نحول ذلك إلى ضمان دقة لكل complex128.
استبعدنا الأنواع والأشكال والأطوال وتخطيطات الذاكرة الأخرى، والمدخل الخالي أو غير المتوافق وout، وNaN واللانهاية والأجزاء الكبيرة أو الكسرية. لم نفحص الأداء أو BLAS أو التنفيذ الداخلي أو تغيير الذاكرة المتشاركة.
احفظ طلب الحساب مع الجواب: مصفوفتان في المدخل لا تكفيان لتقرير هل الجواب عدد واحد أم مصفوفة، ولا هل رافق الحساب أحد المدخلين.
| الاستدعاء | الخرج المسجل | الشكل |
|---|---|---|
| vdot(A,B) | −25−8j | () |
| dot(av,bv) | 1+34j | () |
| dot(A,B) | [[−7+8j,2−27j],[−11−5j,22+18j]] | (2,2) |
| vdot(B,A) | −25+8j | () |
| vdot(A,A) / vdot(B,B) | 39+0j / 64+0j | () / () |
للتوسع: الأعداد المركبة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
