python - معكوس المصفوفة باستخدام numpy





matrix (5)


معكوس المصفوفة باستخدام python و numpy:

>>> import numpy as np
>>> b = np.array([[2,3],[4,5]])
>>> np.linalg.inv(b)
array([[-2.5,  1.5],
       [ 2. , -1. ]])

لا يمكن عكس كل المصفوفات. على سبيل المثال ، المصفوفات المنفردة ليست قابلة للانعكاس :

>>> import numpy as np
>>> b = np.array([[2,3],[4,6]])
>>> np.linalg.inv(b)

LinAlgError: Singular matrix

حل لمشكلة المصفوفة الفردية:

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

الحدس و ELI5 حول انعكاس المصفوفة ولماذا في بعض الأحيان لا يمكن القيام به:

تخيل فيلم بروجيكتور فيلم يضيء ضوءا ساطعا على الفيلم على حائط أبيض ، و "البكسل" في الفيلم المكثف "مسقط" إلى البكسل على الحائط.

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

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

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

مصدر:

numpy.linalg.inv

أود استخدام العقدي لحساب معكوس. لكنني أتلقى خطأً:

'numpy.ndarry' object has no attribute I

لحساب معكوس المصفوفة في حرج ، يقول مصفوفة M ، يجب أن يكون ببساطة: print MI

هنا الرمز:

x = numpy.empty((3,3), dtype=int)
for comb in combinations_with_replacement(range(10), 9):
   x.flat[:] = comb
   print x.I

أفترض ، يحدث هذا الخطأ لأن x مسطح الآن ، وبالتالي الأمر ' I ' غير متوافق. هل هناك عمل حول هذا؟

هدفي هو طباعة INVERSE MATRIX من كل تركيبة المصفوفة العددية الممكنة.




طريقة أخرى للقيام بذلك هي استخدام فئة matrix numpy (بدلاً من صفيف numpy) و السمة I . فمثلا:

>>> m = np.matrix([[2,3],[4,5]])
>>> m.I
matrix([[-2.5,  1.5],
       [ 2. , -1. ]])



ماذا عن numpy.linalg.inv ؟

على سبيل المثال: my_inverse_array = inv (my_array)




السمة I موجودة فقط على كائنات matrix ، وليس ndarray s. يمكنك استخدام numpy.linalg.inv لعكس المصفوفات:

inverse = numpy.linalg.inv(x)

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

try:
    inverse = numpy.linalg.inv(x)
except numpy.linalg.LinAlgError:
    # Not invertible. Skip this one.
    pass
else:
    # continue with what you were doing

أيضا ، إذا كنت ترغب في المرور بجميع المصفوفات 3x3 مع عناصر مرسومة من [0 ، 10) ، فإنك تريد ما يلي:

for comb in itertools.product(range(10), repeat=9):

بدلا من combinations_with_replacement ، أو سوف تخطي المصفوفات مثل

numpy.array([[0, 1, 0],
             [0, 0, 0],
             [0, 0, 0]])



يمكنك استخدام حزمة subprocess مع الكود على النحو التالي:

import subprocess
cmdCommand = "python test.py"   #specify your cmd command
process = subprocess.Popen(cmdCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print output




python numpy matrix