scipy.linalg.

bandwidth#

scipy.linalg.bandwidth(a)#

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

参数:
andarray

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

返回:
lutuple

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

引发:
TypeError

如果不支持数组的 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)