2013-12-17 20 views
6

In MATLAB posso lanciare il comando:Come usare eig con l'opzione nobalance come in MATLAB?

[X,L] = eig(A,'nobalance'); 

Al fine di calcolare gli autovalori senza il balance option.

Qual è il comando equivalente in NumPy? Quando eseguo la versione NumPy di ​​eig, non produce lo stesso risultato del risultato MATLAB con nobalance attivato.

+2

Sembra che non ci possa essere un'opzione. C'è stato un [open ticket] (https://github.com/numpy/numpy/issues/2060) che chiedeva tale capacità per oltre un anno. Potresti aggiungere il tuo supporto e fornire un caso d'uso, ecc. – horchler

+0

@horchler terminato. –

risposta

2

NumPy non può farlo al momento. Come ha detto Horchler, per un po 'di tempo è stato aperto un ticket aperto per questo momento. È, tuttavia, possibile farlo usando le librerie esterne. Qui scrivo fino a farlo utilizzando i binding Python per la libreria NAG

http://www.walkingrandomly.com/?p=5303

Dovrebbe essere possibile fare qualcosa di simile utilizzando qualsiasi interfaccia per LAPACK come l'Intel MKL ecc

+0

Sembra una buona alternativa, potresti comunque controllare il tuo URL? Non sembra funzionare. –

+0

Ciao, quindi ho installato tutto ciò che sembrava necessario per il tuo esempio per funzionare, ma ricevo degli errori quando eseguo lo script di esempio. Questo è ciò che ottengo: OSError: /opt/NAG/cll6i23dcl/lib/libnagc_nag.so: simbolo non definito: __svml_sin2 –

+0

Il sito web di tuicool sta rubando il mio contenuto per quanto posso dire. L'URL che cammina a caso funziona per me. Ho usato Windows nel mio esempio .. lo proveremo su Linux più tardi oggi – WalkingRandomly

3

È puoi anche considerare di installare GNU Octave e incorporarlo in Python usando oct2py. Ad esempio, per determinare l'autovalore della matrice A senza bilanciatura

from oct2py import octave 
... 
[X,L] = octave.eig(A) 

La funzione eig in Octave non esegue il bilanciamento di matrice A.

Se si vuole bilanciare la matrice A, si può andare avanti e scrivere:

from oct2py import octave 
... 
A = octave.balance(A) 
[X,L] = octave.eig(A) 

oct2py possono essere scaricati da questo sito: https://pypi.python.org/pypi/oct2py

Prima di installare oct2py, è Nee d per assicurarsi che SciPy e GNU Octave siano già stati installati. In bocca al lupo!

+0

L'altro modo funziona (@ Camminare a caso). Ma questo è molto interessante. Sono passati quasi due anni ma sto ancora usando lo stesso codice, quindi proverò e riferirò. Grazie! –

+1

Avevo lo stesso problema del tuo che mi piacerebbe avere la mia matrice non bilanciata nel calcolo degli autovalori usando Python. Ho visto il post di @ WalkingRandomly, ma la mia università non ha la libreria NAG commerciale. Poi, mi sono chiesto se il software libero, come GNU Octave, può farlo, e funziona molto bene. Grazie per i tuoi commenti –