get_lapack_funcs#
- scipy.linalg.lapack.get_lapack_funcs(names, arrays=(), dtype=None, ilp64=False)[Quelle]#
Gibt verfügbare LAPACK-Funktionsobjekte aus den Namen zurück.
Arrays werden verwendet, um das optimale Präfix von LAPACK-Routinen zu bestimmen.
- Parameter:
- namesstr oder Sequenz von str
Name(n) von LAPACK-Funktionen ohne Typpräfix.
- arraysSequenz von ndarrays, optional
Arrays können angegeben werden, um das optimale Präfix von LAPACK-Routinen zu bestimmen. Wenn nicht angegeben, werden Double-Precision-Routinen verwendet, andernfalls wird der allgemeinste 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, dass alle Funktionen mit einem Typpräfix beginnen, das vom Typ der Hauptmatrix abhängt. Diese 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 gekapselt 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))