scipy.linalg.lapack.get_lapack_funcs

scipy.linalg.lapack.get_lapack_funcs(names, arrays=(), dtype=None, ilp64=False)[源代码]

从名称返回可用的LAPACK函数对象。

数组用于确定LAPACK例程的最佳前缀。

参数
names字符串或字符串序列

不带类型前缀的LAPACK函数的名称。

arraysndarray序列,可选

可以给出数组来确定LAPACK例程的最佳前缀。如果未指定,将使用双精度例程,否则将使用数组中最一般的类型。

dtype字符串或数据类型,可选

数据类型说明符。在以下情况下不使用 arrays 是非空的。

ilp64{True,False,‘首选’},可选

是否返回ILP64例程变量。选择“首选”将返回ILP64例程(如果可用),否则返回32位例程。默认值:False

退货
funcs列表

包含找到的函数的列表。

注意事项

此例程自动在Fortran/C接口之间进行选择。只要有可能,Fortran代码就会用于列主顺序的数组。在所有其他情况下,最好使用C代码。

在LAPACK中,命名约定是所有函数都以类型前缀开头,这取决于主体矩阵的类型。对于NumPy类型,它们可以分别是{‘s’,‘d’,‘c’,‘z’}中的一个,并且存储在属性中 typecode 返回的函数的。

示例

假设我们想要使用‘?lange’例程来计算数组的选定范数。我们传递数组是为了获得正确的“lange”风格。

>>> 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例程在其内部工作数组具有最佳大小(大到足以进行快速计算,小到可以避免内存浪费)时工作得最好。此大小还由对函数的专用查询确定,该函数通常包装为独立函数,通常表示为 ###_lwork 。下面是一个示例,用于 ?sysv

>>> import scipy.linalg as LA
>>> rng = np.random.default_rng()
>>> 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))