scipy.linalg.

get_lapack_funcs#

scipy.linalg.get_lapack_funcs(names, arrays=(), dtype=None, ilp64=False)[source]#

從名稱返回可用的 LAPACK 函數物件。

陣列用於確定 LAPACK 常式最佳前綴。

參數:
namesstr 或 str 序列

LAPACK 函數的名稱,不含類型前綴。

arraysndarray 序列,選用

可以給定陣列以確定 LAPACK 常式的最佳前綴。如果未給定,將使用雙精度常式,否則將使用陣列中最通用的類型。

dtypestr 或 dtype,選用

資料類型指定符。如果 arrays 為非空,則不使用。

ilp64{True, False, ‘preferred’},選用

是否返回 ILP64 常式變體。選擇 ‘preferred’ 將在可用時返回 ILP64 常式,否則返回 32 位元常式。預設值:False

返回:
funcslist

包含找到的函數的列表。

註解

此常式自動在 Fortran/C 介面之間選擇。對於具有行優先順序的陣列,盡可能使用 Fortran 程式碼。在所有其他情況下,優先使用 C 程式碼。

在 LAPACK 中,命名慣例是所有函數都以類型前綴開頭,這取決於主矩陣的類型。這些前綴可以是 {‘s’, ‘d’, ‘c’, ‘z’},分別對應於 NumPy 類型 {float32, float64, complex64, complex128},並儲存在返回函數的 typecode 屬性中。

範例

假設我們想使用 ‘?lange’ 常式,它計算陣列的選定範數。我們傳遞我們的陣列以獲得正確的 ‘lange’ 版本。

>>> 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'

當 LAPACK 常式的內部 WORK 陣列具有最佳大小(足夠大以進行快速計算,且足夠小以避免浪費記憶體)時,幾個 LAPACK 常式效果最佳。此大小也由對函數的專用查詢確定,該函數通常包裝為獨立函數,通常表示為 ###_lwork。以下是 ?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))