سؤال

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

هل كانت مفيدة؟

المحلول

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

from numpy import matrix
from numpy import linalg
A = matrix( [[1,2,3],[11,12,13],[21,22,23]]) # Creates a matrix.
x = matrix( [[1],[2],[3]] )                  # Creates a matrix (like a column vector).
y = matrix( [[1,2,3]] )                      # Creates a matrix (like a row vector).
print A.T                                    # Transpose of A.
print A*x                                    # Matrix multiplication of A and x.
print A.I                                    # Inverse of A.
print linalg.solve(A, x)     # Solve the linear equation system.

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

نصائح أخرى

تأكد من أنك تحتاج حقًا إلى عكس المصفوفة.وهذا غالبًا ما يكون غير ضروري ويمكن أن يكون غير مستقر عدديًا.عندما يسأل معظم الناس عن كيفية قلب المصفوفة، فإنهم يريدون حقًا معرفة كيفية حل Ax = b حيث A عبارة عن مصفوفة وx وb متجهان.يعد استخدام الكود الذي يحل المعادلة Ax = b لـ x مباشرة أكثر كفاءة وأكثر دقة من حساب معكوس A ثم ضرب المعكوس في B.حتى لو كنت بحاجة إلى حل Ax = b للعديد من قيم b، فليس من الجيد عكس A.إذا كان عليك حل النظام لعدة قيم b، فاحفظ تحليل Cholesky لـ A، لكن لا تقلبه.

يرى لا تقلب تلك المصفوفة.

ومن المؤسف أن المصفوفة المختار، كررت هنا مرة أخرى، إما المفرد أو مشروطة بشدة:

A = matrix( [[1,2,3],[11,12,13],[21,22,23]])

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

ومن الجدير بالملاحظة أن البشر عند اختيار مثال على مصفوفة غالبا ما يتمكنون من اختيار مصفوفة فريدة!

وفعلت لديك مشكلة مع الحل، وبدا ذلك إلى أكثر من ذلك. على منصة أوبونتو كوبونتو، لا يملك نمباي حزمة ديبيان المصفوفة وlinalg حزم الفرعية، وذلك بالإضافة إلى استيراد نمباي، scipy يجب المستوردة أيضا.

إذا كثرت شروط قطري من A بعامل كبير بما فيه الكفاية، ويقول 2، ومصفوفة ووقف المرجح أن يكون المفرد أو القريب المفرد. لذلك

A = matrix( [[2,2,3],[11,24,13],[21,22,46]])

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

وشكرا لمساهمتك،

وOldAl.

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

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

وأعتقد أن هذا يعمل فقط للمصفوفات مربع

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

سيكون Numpy مناسبًا لمعظم الأشخاص، ولكن يمكنك القيام به أيضًا المصفوفات في Sympy

حاول تشغيل هذه الأوامر على http://live.sympy.org/

M = Matrix([[1, 3], [-2, 3]])
M
M**-1

من أجل المتعة، حاول M**(1/2)

إذا كنت أكره نمباي، والخروج RPy والنسخة المحلية من R، واستخدامه بدلا من ذلك.

و(أود أن أردد أيضا لجعل لكم كنت حقا بحاجة لعكس المصفوفة. وفي R، على سبيل المثال، linalg.solve وحل () وظيفة لا فعلا انعكاس كامل، لأنه لا لزوم لها.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top