Funzioni Scipy Lapack

Funzioni Scipy Lapack
Le biblioteche Scipy e Numpy incorporate sono incredibili per eseguire qualsiasi tipo di operazioni di algebra lineare in un programma Python. Tuttavia, se non si trova una funzione o un metodo specifico che soddisfi la necessità di funzioni di algebra lineare, puoi sempre fare riferimento alle funzioni Lapack. Le funzioni Lapack vengono utilizzate per risolvere le complesse funzioni di algebra lineare con facilità e rapidamente. In questa guida, abbiamo lo scopo di esplorare il maggior numero possibile di funzioni lapache per aiutarti a capire come puoi semplificare il tuo lavoro con le funzioni di algebra lineare.

Qual è la funzione lapack?

Lapack è una libreria indipendente, open source e gratuita utilizzata specificamente per l'esecuzione delle operazioni di algebra lineare. Sta per un pacchetto di algebra lineare e fornisce calcoli a matrice robusti e veloci e algebra lineare numerica. Lapack fornisce una base per tutti i tipi di funzioni di algebra lineare numerica e il calcolo della matrice in Scipy, Numpy e MATLAB. Lapack è fondamentalmente costruito su una grande libreria di fortran multi -autore specificamente per l'algebra lineare numerica. Il pacchetto Lapack è in grado di gestire contemporaneamente più colonne a matrice ed è molto veloce poiché è stato intenzionalmente fatto usare nei supercomputer.

La libreria SCIPY offre una vasta gamma di funzioni lapache di basso livello all'interno del modulo Linalg. Queste funzioni non eseguono il controllo degli errori e, se lo fanno, sarà molto poco, il che porta al crash del sistema. L'elenco di Scipy.linalg.Le funzioni lapache sono molto lunghe in quanto contiene diverse funzioni utili, i.e., SGBSV, CGBSV, SGBTRS, ZGBTRS, SGECON, CGEEQUEET, SGEEV, SGEHRD, DGEJSV, DGELSD, ZGELSS, ZGELSY, ZGEQRF, DGESV, CGGEV, ecc. Ogni metodo ha funzioni diverse e ha caratteristiche diverse. C'è solo una funzione di ricerca nello Scipy.linalg.Modulo lapack e questa è la funzione get_lapack_funcs. Passiamo alla sezione Esempio per comprendere il funzionamento di Scipy.linalg.funzioni lapache.

Esempio 1:

Il Scipy.linalg.La funzione lapack ha solo una funzione di ricerca e questo è get_lapack_funcs. GET_LAPACK_FUNCS viene utilizzato per ottenere la funzione lapack disponibile specificata dall'attributo. La sintassi di get_lapack_funcs è la seguente:

Il parametro "nome" contiene il nome della funzione sotto forma di una stringa o sequenza di stringhe senza alcun tipo di prefisso. Il parametro 'array' contiene la sequenza di array multidimensionali che vengono utilizzati per determinare i prefissi ottimali della routine lapack. Il parametro 'dType' definisce il tipo di dati e, infine, il parametro 'ILP' determina la variante di routine ILP64. I tre parametri Nome, DType e ILP sono opzionali, quindi se non si fornisce specificamente un valore per questi parametri, la funzione utilizzerà automaticamente i valori predefiniti. Get_lapack_funcs restituirà l'elenco delle funzioni trovate rispetto ai valori dei parametri forniti. Considera il codice di esempio indicato di seguito per avere una migliore comprensione:

Importa Numpy come NP
Import Scipy.linalg come la
r = np.casuale.default_rng ()
a = r.casuale ((1, 2))
Lab = LA.get_lapack_funcs ('Lange', (a+1j,))
Stampa (laboratorio.tipo di tipo)

La funzione è iniziata con l'importazione della libreria Numpy come NP e SCIPY.pacchetto linalg come LA. Dopo aver importato tutte le librerie richieste, abbiamo chiamato la funzione casuale () per eseguire la funzione default_rng (). Il valore calcolato viene memorizzato in una variabile 'R' e 'R' viene quindi utilizzata per chiamare la funzione casuale per generare un array di valori casuali costituiti da una riga e due colonne. Ora che abbiamo tutti i dati essenziali, possiamo chiamare la funzione get_lapack_funcs per ottenere l'elenco delle funzioni.

Esistono quattro tipi di prefisso contro ogni funzione nel Scipy.linalg.Libreria lapack e sono C, D, S e Z e ognuno di essi ha un tipo di dati complesso64, float64, float32 e complesso128. Qualunque sia il nome della funzione che fornisci a get_lapack_funcs, otterrai in restituzione. Qui, abbiamo menzionato il nome della funzione "Lange" e chiamato il metodo TypeCode. Il nome del prefisso è archiviato nell'attributo TypeCode, quindi quando lo si chiama, otterrai il nome prefisso del nome della funzione fornito. Vediamo quale risultato otteniamo dalla funzione get_lapcak_funcs:

Esempio 2:

Supponiamo di dover usare la routine "Lange" per calcolare la norma di array selezionata, ma non siamo sicuri del prefisso della funzione. Del resto, possiamo semplicemente passare il nostro array alla funzione get_lapack_funcs e ottenere il sapore del prefisso corretto per l'array. Qui, stiamo solo modificando un po 'l'esempio precedente per mostrarti i diversi risultati della funzione get_lapcak_funcs per un array diverso. Considera il codice di riferimento indicato di seguito:

Importa Numpy come NP
Import Scipy.linalg come la
r = np.casuale.default_rng ()
a = r.casuale ((5, 5))
Lab = LA.get_lapack_funcs ('Lange', (a,))
Stampa (laboratorio.tipo di tipo)

Come puoi notare, abbiamo modificato solo i dati dell'array e la routine del prefisso per verificare come cambia il risultato della funzione GET_LAPACK_FUNCS. Il risultato è riportato di seguito nello snippet:

Esempio 3:

Come abbiamo discusso in precedenza, la funzione Lapack di basso livello esegue un controllo di errori poco o nessun, ma sono molto veloci e intenzionalmente progettati per gestire una grande quantità di dati. Quindi, funzionano meglio per dati abbastanza grandi per calcolo rapido e abbastanza piccolo può evitare gli sprechi di memoria. Ora, testare le capacità di ottimizzazione di GET_LAPACK_FUNCS fornendole un array di dimensioni di 1000 x 2000. Considera il codice di riferimento indicato nello snippet del codice di seguito:

Importa Numpy come NP
Import Scipy.linalg come la
r = np.casuale.default_rng ()
a = rng.casuale ((1000, 2000))
xlwork = la.get_lapack_funcs ('sysv_lwork', (a,))
opt_lwork, _ = xlwork (a.forma [0])
Print (opt_lwork)
Stampa (xlwork.tipo di tipo)

Come puoi vedere, abbiamo fornito la dimensione di 1000 x 2000 dell'array da generare. È stato dato il nome della funzione "sysv_lwork" e l'array calcolato è stato passato alla funzione get_lapack_funcs. Se la dimensione dell'array generato è ottimale o no è determinata da una query dedicata che è nota come ### _ lwork. Come puoi vedere, abbiamo usato XLWork insieme alla query Sysv_Lwork per ottenere la dimensione ottimale dell'array calcolato. Abbiamo anche chiamato TypeCode per conoscere il tipo di tipo ottimali per l'array generato rispetto al nome della funzione sysv_lwork.

Conclusione

Questa guida è avvolta attorno alla libreria lapack per funzioni di matrice complesse e sistemi di algebra lineare numerica. Abbiamo appreso il funzionamento di funzioni lapache di basso livello con l'aiuto di più esempi. Lapack sta per il pacchetto di algebra lineare, utilizzato da Numpy, Scipy e Matlab. È la base per le funzioni di algebra lineare offerte dalle biblioteche Scipy e Numpy. Per comprendere meglio le funzioni lapache di basso livello, praticare questi esempi e provare a modificarli in base a diversi scenari.