scipy.linalg.

bandwidth#

scipy.linalg.bandwidth(a)#

返回 2D 数值数组的下带宽和上带宽。

参数:
andarray

尺寸为 (N, M) 的输入数组

返回:
lutuple

表示下带宽和上带宽的 2 元组整数。0 表示该侧没有子对角线或超对角线(三角形),对于 N 行来说,(N-1) 意味着该侧已满。相同示例适用于下三角部分的 (M-1)。

引发:
TypeError

如果数组的数据类型不受支持,特别是 NumPy float16、float128 和 complex256 数据类型。

说明

此帮助器函数仅遍历数组以查找非零项,无论数组中是否存在带状结构。因此,性能取决于非零项的密度以及内存布局。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)