tensorinv تشترط تساوي حاصلي ضرب مجموعتي الأبعاد اللتين تفصلهما ind. [1]
افصل مجموعتي الأبعاد
tensorinv تشترط تساوي حاصلي ضرب مجموعتي الأبعاد اللتين تفصلهما ind. [1]
الخرج يرتب مجموعة الأبعاد التالية لـind قبل المجموعة السابقة لها. [1]
ind عدد موجب، وقيمته الافتراضية2. [1] نكتب التقسيم والشكل قبل تفسير كلمة معكوس.
نستخدم معاملات مؤلفة نستطيع عكسها بكسور مستقلة. لا نفترض أن وجود أبعاد أكثر يجعل المدخل دفعة مصفوفات بالمعنى نفسه لكل دالة.
تجميع أربعة صفوف وأربعة أعمدة
في تشغيلنا، المدخل A بالشكل (2,2,4) يجمع أول بُعدين عند ind=2 إلى4، ويجمع الباقي إلى4؛ خرج المعكوس شكله (4,2,2).
معاملات مثالنا بعد التجميع قطرية 2 و4 و8 و16؛ معاملات المعكوس المقابلة 1/2 و1/4 و1/8 و1/16، وفحصنا الهوية بانكماشين مختلفين.
import numpy as np M=np.array([[2.,0.,0.,0.],[0.,4.,0.,0.],[0.,0.,8.,0.],[0.,0.,0.,16.]],dtype=np.float64) A=M.reshape(2,2,4) B=np.linalg.tensorinv(A,ind=2) left=np.tensordot(B,A,axes=2) right=np.tensordot(A,B,axes=1)
في مثالنا نفهرس A بالثلاثي (i,j,k). يقابل الزوج (i,j) صفًا رقمُه 2i+j في M، بينما k رقم العمود. هذا وصف للترتيب المحدد الذي أنشأناه، وليس قاعدة لجميع ترتيبات الذاكرة.
لدينا أربعة أزواج للصف: (0,0)، (0,1)، (1,0)، (1,1). الخانات غير الصفرية في A هي (0,0,0)=2 و(0,1,1)=4 و(1,0,2)=8 و(1,1,3)=16. بقيت بايتات A كما كانت بعد الحساب.
عند تجميع خرج B على صورة4×4، كان قطريًا بالقيم 0.5 و0.25 و0.125 و0.0625. شكل B هو (4,2,2) ونوعه float64، على NumPy 2.3.5 وCPython 3.12.14.
انكماش left يضم آخر محورين من B إلى أول محورين من A؛ أعاد مصفوفة الوحدة4×4. أما right فيضم المحور الأخير من A إلى الأول من B، وشكله (2,2,2,2)؛ بعد تجميعه4×4 أعاد الوحدة أيضًا. أعداد المثال تتيح مقارنة دقيقة لكل خانة.
يرتبط معكوس tensorinv بعملية tensordot. [1] أعداد المحاور في فحوصنا مكتوبة صراحة؛ لا نستبدل axes=1 بـ2 في الانكماش العكسي دون مراجعة الأطوال.
لماذا ترفض دالة أخرى المدخل؟
inv(A) رفعت LinAlgError في التشغيل؛ آخر بُعدين في A هما2 و4. كذلك رفضت tensorinv(A,ind=1) التقسيم إلى2 و8.
تقبل inv شرائح مربعة على آخر محورين، وترفع LinAlgError عند عدم التربيع أو فشل العكس. [2]
في A، الشرائح على آخر محورين بحجم2×4. لا يصنع عدد الشرائح معكوسًا لمستطيل؛ ولهذا يسجل الاستدعاء الخطأ في تشغيلنا. نجاح التجميع4×4 مع tensorinv لا يغير شكل الشرائح التي قرأتها inv.
وعند ind=1، صارت المجموعة الأولى بطول2، والمجموعة الثانية حاصلة الضرب2×4=8. لم يتحقق التساوي المطلوب، ورفعت tensorinv الخطأ في هذا الاستدعاء. لم نغير الأعداد؛ غيرنا موضع الفصل.
المدخل نفسه والاسم نفسه لا يكفيان لنقل نتيجة النجاح إلى خيار فصل مختلف. نحفظ ind مع شكل المدخل وشكل الخرج، ثم نفحص عملية الضرب أو الانكماش التي تمثل المعكوس المقصود.

تحكم بأربعة أبعاد ونطاق الفحص
تحكم: الأعداد نفسها بالشكل (2,2,2,2) تقبل tensorinv مع ind=2؛ inv يرفض كتلها المفردة. مرت660 مقارنة في نطاقنا القطري المحدد.
C=M.reshape(2,2,2,2) D=np.linalg.tensorinv(C,ind=2) check=np.tensordot(D,C,axes=2)
حاصل أول بُعدين في C يساوي4، وحاصل الأخيرين يساوي4. أعادت D الشكل (2,2,2,2)، وكان تجميعها4×4 قطريًا بالمقلوبات نفسها؛ وتجميع check أعاد الوحدة4×4.
مع inv(C) ظهر LinAlgError أيضًا، لكن الشرائح هنا مربعة2×2. في مثالنا كل شريحة تحمل خانة غير صفرية واحدة فقط، فتملك صفًا أو عمودًا صفريًا. لذلك فشل العكس داخل تلك الشرائح، بينما بقيت مصفوفة المعاملات المجمعة4×4 قابلة للعكس.
مرجعنا يبني القطر ومقلوب كل خانة باستخدام Fraction، ويبني الوحدة بمقارنة أرقام الصفوف والأعمدة. لم يستخدم inv أو tensorinv لإنتاج المتوقع.
الشبكة81 حالة، لأن كل خانة من الخانات القطرية الأربع تختار من2 و4 و8. لكل حالة ثمانية فحوص تشمل قيم B وشكله ونوعه، وانكماشين، والخطأين، وثبات المدخل، واتفاق الافتراضي مع ind=2.
أضفنا الثمانية للمثال الرئيسي وأربعة لتحكم C: 81×8+8+4=660، ومرت كلها. قصرنا التجربة على معاملات قطرية موجبة من قوى اثنين وعلى الشكلين المذكورين وfloat64. لم نفحص معاملات خارج القطر، أو موترًا مجمعًا منفردًا، أو ترتيب ذاكرة آخر، أو أعدادًا مركبة أو دقة عامة أو أداءً.
| المدخل | الاستدعاء | الخرج |
|---|---|---|
| A: (2,2,4) | tensorinv ind=2 | (4,2,2) |
| A: (2,2,4) | tensorinv ind=1 | LinAlgError |
| A: (2,2,4) | inv | LinAlgError |
| C: (2,2,2,2) | tensorinv ind=2 | (2,2,2,2) |
| C: (2,2,2,2) | inv | LinAlgError |
للتوسع: أنواع المصفوفات.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
