scipy.linalg.lapack.
get_lapack_funcs#
- scipy.linalg.lapack.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 中,命名约定是所有函数都以类型前缀开头,这取决于主矩阵的类型。 对于 NumPy 类型 {float32、float64、complex64、complex128},这些可以是 {‘s’、‘d’、‘c’、‘z’} 之一,并存储在返回函数的属性
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 数组具有最佳大小时(足够大以进行快速计算,并且足够小以避免浪费内存),它们的效果最佳。 此大小也由对函数的专用查询确定,该查询通常包装为独立函数,通常表示为
###_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))