WebHU - Programozási kérdések és válaszok

Hogyan lehet kiszámítani a nagy léptékű inverz mátrixot pythonban

Mint tudjuk, az inverz mátrixot a numpy segítségével a következőképpen számíthatjuk ki.

matrix1 = np.matrix([[8,2,5],[7,3,1],[4,9,6]])
inverse_matrix1 = matrix1.I
result = np.matmul(matrix1, inverse_matrix1)

Az eredmény a következő, és könnyen ellenőrizhetjük a pontosságot egyszerűen az np.matmul végrehajtásával.

matrix([[ 0.03585657,  0.1314741 , -0.05179283],
    [-0.15139442,  0.11155378,  0.10756972],
    [ 0.20318725, -0.25498008,  0.03984064]])

Az ellenőrzött eredmény a következő.

matrix([[ 1.00000000e+00,  0.00000000e+00,  2.77555756e-17],
    [ 0.00000000e+00,  1.00000000e+00,  3.46944695e-17],
    [-2.22044605e-16,  0.00000000e+00,  1.00000000e+00]])

Ez az eset azonban nagyon kicsi. A gyakorlatban ugyan kerülni kell az inverz mátrix kiszámítását a nagy mátrixhoz, de néha ezt kell tennünk. Azt találtam, hogy a mátrix. Nem tudok viszonylag pontos inverz mátrixot megadni, ha a mátrix viszonylag nagy. A példa a következőképpen látható. Egy (300, 300) alakú Gauss-kernelmátrix inverz mátrixát szeretném kiszámítani.

point = np.reshape(np.linspace(-5.0, 5.0, 300), (300, 1))
kernel_matrix_np = np.exp(-(point - np.transpose(point))**2 / (2 * 2**2))

Nem tudom, hogyan tudnék ilyen mátrixot kiszámítani. Nagyon szépen köszönöm!

26.06.2018

  • numpy.matrix és metódusai elavultnak tekintendők, helyette használjon tömböket. Próbálja ki: scipy.linalg.inv; Nem számítok rá, hogy drámaian jobb lesz, de a SciPy nagyobb valószínűséggel finomhangolásra kerül. Az úszók kettős pontossága korlátozza azt, hogy mit lehet tenni a nagy problémákkal. 26.06.2018
  • Szerintem a feltétel száma túl nagy np.linalg.cond(kernel_matrix_np)____. Ki lehet számolni ilyen mátrixot, de a kerekítési hibák miatt nem szabad 26.06.2018
  • Köszönöm mindkét közreműködést! 27.06.2018

Válaszok:


1

A példák eredményei közötti különbség nem a mátrixok méretéből, hanem a rangból adódik. Az első mátrix teljes rangú

>>> matrix_rank(matrix1)
3  ## Shape of the matrix

a mátrix alakja), míg a második esetben a mátrix 19. rangú.

>>> matrix_rank(kernel_matrix_np)
19   ## Much less than the shape of the matrix

Ebben az esetben nem lehet visszaállítani az eredeti mátrixot – teljes rangú mátrixra van szükség. Ahogy @Brenlla említette, ez a feltételszámban is megjelenik. Durván szólva a feltételszám minden nagyságrendje a pontosság elvesztésének egy számjegyét jelenti.

>>> cond(kernel_matrix_np)
1.9605027391309521e+19

Ez csak két dolog, amelyet ellenőrizni kell, amikor mátrixokkal végzett számításokat végeznek, és ezek közül általában az egyik jelzi, hol van a probléma. Végül néhány esetben a pinv használata az inv helyett valamivel jobb eredményt ad, bár ez ebben az esetben nem működik, mivel a mátrix nem teljes rangú.

26.06.2018
  • Nagyon szépen köszönöm! Figyelmetlenségem miatt nem vettem észre, hogy a mátrixom rendelkezik-e az inverz mátrixszal. 27.06.2018
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..