scipy.linalg.

带宽#

scipy.linalg.bandwidth(a)#

返回一个二维数值数组的上下带宽。

参数:
andarray

大小为 (N, M) 的输入数组

返回:
lu元组

一个包含两个整数的2元组,表示下带宽和上带宽。零表示在该侧没有次对角线或超对角线(三角形),并且,例如对于N行(N-1)意味着该侧是满的。同样的例子适用于上三角部分,其中(M-1)。

Raises:
类型错误

如果数组的 dtype 不被支持,特别是 NumPy 的 float16、float128 和 complex256 dtypes。

注释

这个辅助函数简单地遍历数组,查找非零条目,无论数组中是否存在带状结构。因此,性能取决于非零条目的密度和内存布局。Fortran 或 C 连续数组处理得最好,否则会因额外的随机内存访问成本而受到影响。

策略是分别在上三角和下三角部分中仅查找未测试的带状元素;根据内存布局,我们按行或按列扫描。此外,假设我们正在按行扫描,并且在第6行,第4个条目为非零,那么在后续行中,水平搜索仅进行到该带状条目,因为我们知道该带状已被占用。因此,完全密集矩阵扫描的成本在n的顺序上。

示例

>>> import numpy as np
>>> from scipy.linalg import bandwidth
>>> A = np.array([[3., 0., 0., 0., 0.],
...               [0., 4., 0., 0., 0.],
...               [0., 0., 5., 1., 0.],
...               [8., 0., 0., 6., 2.],
...               [0., 9., 0., 0., 7.]])
>>> bandwidth(A)
(3, 1)