get_lapack_funcs#
- scipy.linalg.get_lapack_funcs(names, arrays=(), dtype=None, ilp64=False)[Quellcode]#
Gibt verfügbare LAPACK-Funktionsobjekte aus den Namen zurück.
Arrays werden verwendet, um das optimale Präfix für LAPACK-Routinen zu bestimmen.
- Parameter:
- namesstr oder Sequenz von str
Name(n) von LAPACK-Funktionen ohne Typ-Präfix.
- arraysSequenz von ndarrays, optional
Arrays können angegeben werden, um das optimale Präfix für LAPACK-Routinen zu bestimmen. Wenn keine angegeben sind, werden Double-Precision-Routinen verwendet, andernfalls wird der generischste Typ in den Arrays verwendet.
- dtypestr oder dtype, optional
Datentyp-Spezifizierer. Wird nicht verwendet, wenn arrays nicht leer ist.
- ilp64{True, False, ‘preferred’}, optional
Ob die ILP64-Routinevariante zurückgegeben werden soll. Die Wahl von ‘preferred’ gibt die ILP64-Routine zurück, falls verfügbar, andernfalls die 32-Bit-Routine. Standard: False
- Rückgabe:
- funcsListe
Liste, die die gefundenen Funktion(en) enthält.
Hinweise
Diese Routine wählt automatisch zwischen Fortran/C-Schnittstellen. Fortran-Code wird immer dann verwendet, wenn für Arrays mit Spaltenreihenfolge möglich. In allen anderen Fällen wird C-Code bevorzugt.
In LAPACK beginnt die Namenskonvention für alle Funktionen mit einem Typ-Präfix, das vom Typ der Hauptmatrix abhängt. Dies können {'s', 'd', 'c', 'z'} für die NumPy-Typen {float32, float64, complex64, complex128} sein und werden im Attribut
typecodeder zurückgegebenen Funktionen gespeichert.Beispiele
Angenommen, wir möchten die Routine '?'lange' verwenden, die die ausgewählte Norm eines Arrays berechnet. Wir übergeben unser Array, um die richtige 'lange'-Variante zu erhalten.
>>> import numpy as np >>> import scipy.linalg as LA >>> rng = np.random.default_rng()
>>> a = rng.random((3,2)) >>> x_lange = LA.get_lapack_funcs('lange', (a,)) >>> x_lange.typecode 'd' >>> x_lange = LA.get_lapack_funcs('lange',(a*1j,)) >>> x_lange.typecode 'z'
Mehrere LAPACK-Routinen funktionieren am besten, wenn ihr interner WORK-Array die optimale Größe hat (groß genug für schnelle Berechnungen und klein genug, um Speicherverschwendung zu vermeiden). Diese Größe wird auch durch eine dedizierte Abfrage an die Funktion bestimmt, die oft als eigenständige Funktion verpackt und üblicherweise als
###_lworkbezeichnet wird. Unten ist ein Beispiel für?sysv>>> a = rng.random((1000, 1000)) >>> b = rng.random((1000, 1)) * 1j >>> # We pick up zsysv and zsysv_lwork due to b array ... xsysv, xlwork = LA.get_lapack_funcs(('sysv', 'sysv_lwork'), (a, b)) >>> opt_lwork, _ = xlwork(a.shape[0]) # returns a complex for 'z' prefix >>> udut, ipiv, x, info = xsysv(a, b, lwork=int(opt_lwork.real))