axes في tensorsolve تنقل محاور المعامل المحددة إلى اليمين؛ الافتراضي لا يعيد ترتيبها. [1]
اختر محاور المجهول
axes في tensorsolve تنقل محاور المعامل المحددة إلى اليمين؛ الافتراضي لا يعيد ترتيبها. [1]
تُجمع فهارس المجهول مع المحاور اليمنى للمعامل؛ حاصلا ضرب أبعاد الطرف الأيمن والمجهول يجب أن يتساويا. [1]
نسمّي محوري المعادلات i وj، ومحوري المجهول k وl. في A نرتبها (i,j,k,l). نؤلف P بالترتيب (k,i,l,j)، فتتشابك مجموعة المعادلات مع مجموعة المجهول.
جميع أطوال المحاور هنا2؛ لذلك لا يظهر اختلاف الترتيب في الشكل (2,2,2,2). نحتاج أسماء المحاور وعلاقة كل خانة بالمعادلة، لا قائمة الأطوال وحدها.
المعامل نفسه بتجميع آخر
في مثالنا، A بالشكل (2,2,2,2) تعطي الحل [[1,2],[3,4]]؛ المعامل P المتشابك يفشل افتراضيًا، ويستعيد الحل مع axes=(0,2).
عكس القائمة إلى axes=(2,0) أعاد [[1,3],[2,4]] بالشكل نفسه (2,2)؛ ترتيب محوري المجهول اختلف في هذا التشغيل.
import numpy as np d=[2,3,5,7] a=[[[[d[2*i+j] if i==k and j==l else 0 for l in range(2)] for k in range(2)] for j in range(2)] for i in range(2)] A=np.array(a,dtype=np.float64) P=np.array([[[[a[i][j][k][l] for j in range(2)] for l in range(2)] for i in range(2)] for k in range(2)],dtype=np.float64) b=np.array([[2.,6.],[15.,28.]],dtype=np.float64) x=np.linalg.tensorsolve(A,b) y=np.linalg.tensorsolve(P,b,axes=(0,2)) z=np.linalg.tensorsolve(P,b,axes=(2,0))
في NumPy 2.3.5 وCPython 3.12.14، أعادت x وy القيم [[1,2],[3,4]]، وأعادت z القيم [[1,3],[2,4]]. النواتج من float64 بالشكل (2,2). الاستدعاء np.linalg.tensorsolve(P,b) دون axes رفع LinAlgError.
A[i,j,k,l] لا تحمل قيمة غير صفرية إلا عندما i=k وj=l. لذلك المعادلات الأربع هي2x₀₀=2، و3x₀₁=6، و5x₁₀=15، و7x₁₁=28. القسمة المباشرة تعطي1 و2 و3 و4 بالترتيب المعلن.
أما P[k,i,l,j]=A[i,j,k,l]. تجميع أول محورين فيه صفًا وآخر محورين عمودًا يعطي [[2,0,0,3],[0,0,0,0],[0,0,0,0],[5,0,0,7]]. صفان صفريان يمنعان عكس هذا التجميع4×4.
مع axes=(0,2)، ينتقل k وl إلى النهاية، فيصبح ترتيب المحاور الأصلية لـP هو (1,3,0,2)، أي (i,j,k,l). مع (2,0) يصير (1,3,2,0)، أي (i,j,l,k). لذلك y[k,l] تقابل z[l,k] في مثالنا.
transpose تعيد ترتيب المحاور؛ محور الناتج i يقابل محور axes[i] في المدخل. [2]
تحكم: np.transpose(P,(1,3,0,2)) أعادت A نفسها في التشغيل، وحل المعادلة عليها أعاد x. كما أعاد الانكماش np.tensordot(A,y,axes=2) الطرف b، والانكماش على معامل ترتيب (i,j,l,k) مع z أعاد b أيضًا.
حل متناظر يخفي فرق الترتيب
تحكم بحل متناظر [[1,2],[2,4]] أعطى اتفاقًا بين ترتيبي axes؛ اتفاق ذلك التحكم وحده أخفى فرق ترتيب محوري المجهول.
في التحكم أبقينا المعاملين A وP، واخترنا طرفًا جديدًا bs=[[2,6],[10,28]]. المعادلات القطرية تعطي xs=[[1,2],[2,4]] بدل الحل الرئيسي.
أعاد ترتيبا axes هذا الحل نفسه، من float64 بالشكل (2,2). لأن xs[0,1]=xs[1,0]=2، لم يكشف النقل بين هذين الموضعين اختلافًا في قائمة الأعداد.
لكن الحل الرئيسي له2 في الموضع (0,1) و3 في (1,0)، فأظهر الفرق بين y وz. لم نعرض الحل المتناظر دليلًا على تكافؤ ترتيبَي المحاور لكل طرف أيمن.
بقيت بايتات المعاملين والطرف الأيمن دون تغيير بعد المسارات. لم يكن نجاح القائمة المرتبة تعديلًا صامتًا لـP؛ اختبرنا تفسيرًا مختلفًا لمحاوره في طلب معلن.

مرجع مستقل وحدود الفحص
مرت664 مقارنة على81 اختيارًا للمعاملات والمثال والتحكم؛ النطاق float64 ومعاملات قطرية موجبة ومحاور معلنة، دون حكم على الاستقرار العام أو الأداء.
مرجعنا يبدأ بقوائم Python وأعداد صحيحة صغيرة: يبني معاملات القطر، ثم يكتب P بعلاقة الفهارس السابقة. يختار الحل المتوقع صراحةً، ويبني b بضرب كل معامل قطري في خانة الحل المناظرة.
لا يستدعي tensorsolve أو solve أو inv أو tensorinv لصنع الحل المتوقع. ويثبت فشل التجميع الافتراضي لـP بصفّيه الصفريين، لا بتوقع خرج صاغه استدعاء حل آخر.
لكل واحد من المعاملات القطرية الأربعة ثلاث قيم ممكنة:2 و3 و5. إذن3⁴=81 اختيارًا؛ أبقينا الحل المتوقع الرئيسي [[1,2],[3,4]]. يظل تشابك المحاور نفسه في جميعها.
ثمانية فحوص لكل حالة: حل A؛ خطأ P الافتراضي؛ حل axes=(0,2)؛ حل (2,0)؛ التحكم بمنقول المحاور الصريح؛ انكماشان يعيدان الطرف الأيمن؛ ثبات المدخلات؛ والصفان الصفريان في التجميع الخاطئ.
قارنا قيم الحلول ونوعها وشكلها بالمتوقع. أضفنا الثمانية للمثال الرئيسي والثمانية للتحكم المتناظر: 81×8+8+8=664. كانت المقارنة دقيقة للأعداد الصغيرة في هذه التجربة؛ ليست ضمانًا عامًا للحساب العائم.
استبعدنا الأبعاد الأخرى والتبديلات الأخرى والمعاملات خارج القطر والدفعات والمركبة والاستقرار العام والذاكرة والأداء. عند حفظ الحل اكتب ترتيب محوري المجهول معه، ثم افحص أنه يعيد الطرف الأيمن مع ترتيب المعامل المستخدم.
| الطلب | النتيجة | شكل الحل |
|---|---|---|
| A دون إعادة ترتيب | [[1,2],[3,4]] | (2,2) |
| P افتراضيًا | LinAlgError | لا حل ناجح |
| P مع axes=(0,2) | [[1,2],[3,4]] | (2,2) |
| P مع axes=(2,0) | [[1,3],[2,4]] | (2,2) |
للتوسع: أنواع المصفوفات.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
