Praca nad algebrą macierzową tutaj. Czasami potrzebuję odwrócić matrycę, która może być pojedyncza lub źle uwarunkowana. Rozumiem, że jest to pythonic, aby po prostu to zrobić:Efektywne i pythonicowe sprawdzanie pojedynczej matrycy
try:
i = linalg.inv(x)
except LinAlgErr as err:
#handle it
, ale nie jestem pewien, jak skuteczne jest to. Czy nie byłoby lepiej?
if linalg.cond(x) < 1/sys.float_info.epsilon:
i = linalg.inv(x)
else:
#handle it
Czy numpy.linalg po prostu wykonuje z góry test, który zakazałem?
Próbowanie czegoś i reagowanie na warunki błędu po ich wystąpieniu jest zwykle Pythonicznym sposobem robienia rzeczy, ale sposób Pythonica nie zawsze jest najbardziej efektywnym sposobem. Zakłada się, że jeśli zależy ci na robieniu rzeczy "w sensie Pythonicznym", efektywność jest priorytetem drugorzędnym. –
Nie mów, że efektywność jest priorytetem dodatkowym; zamiast tego powiem, że chcę przeprowadzić biwariacyjną optymalizację: pythonicity + efficiency (stąd tytuł postu). –
W obliczeniach numerycznych zwykle uważane jest za niewłaściwe ćwiczenie, aby wyraźnie obliczyć odwrotność. W większości przypadków znacznie lepiej jest obliczyć dekompozycję LU za pomocą scipy.linalg.lu_factor, a później można go szybko rozwiązać dla wielu wektorów za pomocą scipy.linalg.lu_solve. – DaveP